listview用法及其排序

下面是xaml代码:

<Controls:MetroWindow
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
                  x:Class="spph.DeviceWindow"
                  Title="设备管理"  Height="600" Width="1000"
                  MinHeight="600" MinWidth="1000"
                  ShowInTaskbar="False"
                  WindowStartupLocation="CenterOwner" EnableDWMDropShadow="True" 
                  >

    <!--   以后修改界面程序,就使用DockPanel控件
    <DockPanel LastChildFill="true">
        <DockPanel x:Name="LeftPanel" DockPanel.Dock="Left" Width="200"/>

        <Grid x:Name="DevicePanel" Visibility="Visible">
            <TextBlock HorizontalAlignment="Left" Height="36" Width="263"  Margin="29,188,0,0" TextWrapping="Wrap" Text=" 开发中" VerticalAlignment="Top"/>

        </Grid>

    </DockPanel>
    -->
    
     
    <Canvas Margin="0,0,0,0" Name="DeviceInfo">
        <TextBlock Text="设备信息列表"   Foreground="#FF434D55" Background="AliceBlue"
                                       Height="30" HorizontalAlignment="Center" VerticalAlignment="Top"  Canvas.Left="0" Canvas.Top="0" 
                                       Width ="180" TextAlignment="Center" >
        </TextBlock>
        <ScrollViewer x:Name="DeviceInfoScrolls" Height="510" Width="180" Canvas.Top="30">
            <ScrollViewer.Content >
                <StackPanel Orientation="Vertical">
                    <ListBox Name="listBox_DeviceName" SelectionMode="Single" SelectionChanged = "showDeviceInfo" >
                    </ListBox>
                </StackPanel>
            </ScrollViewer.Content>
        </ScrollViewer>
        <Button Height="30"  Width="180" Foreground="#FF434D55" Click="newDeviceInfo" Canvas.Left="0" Canvas.Bottom="0">新建设备信息</Button>

        <TextBlock Name="textBlock_DeviceID" Canvas.Left="418" Canvas.Top="48">设备号码</TextBlock>
        <TextBox Name="textBox_DeviceID" IsReadOnly="True" Canvas.Left="488" Canvas.Top="44" Width="175"></TextBox>

        <TextBlock Name="textBlock_DeviceName" Canvas.Left="418" Canvas.Top="88">设备名称</TextBlock>
        <TextBox Name="textBox_DeviceName" Canvas.Left="488" Canvas.Top="84" Width="175"></TextBox>

        <TextBlock Name="textBlock_Server" Canvas.Left="418" Canvas.Top="128" >服务器地址</TextBlock>
        <TextBox Name="textBox_Server" Canvas.Left="488" Canvas.Top="124" Width="175"></TextBox>

        <TextBlock Name="textBlock_Port" Canvas.Left="418" Canvas.Top="168" >端口号</TextBlock>
        <TextBox Name="textBox_Port" Canvas.Left="488" Canvas.Top="168" Width="175" ></TextBox>

        <TextBlock Name="textBlock_Password" Canvas.Left="418" Canvas.Top="208" >密码</TextBlock>
        <TextBox Name="textBox_Password"  Canvas.Left="488" Canvas.Top="204" Width="175" ></TextBox>
        <PasswordBox Name="passwordBox_Password"  Canvas.Left="488" Canvas.Top="204" Width="175" ></PasswordBox>

        <TextBlock Name="textBlock_DeviceUser" Canvas.Left="418" Canvas.Top="248">设备负责人</TextBlock>
        <TextBox Name="textBox_DeviceUser" Canvas.Left="488" Canvas.Top="244" Width="175" ></TextBox>
        <ComboBox Visibility="Hidden" Canvas.Left="488" Canvas.Top="244" Height="26" Width="175"
                          Name="comboBox_DeviceUser">
        </ComboBox>

        <TextBlock Name="textBlock_Desc" Canvas.Left="418" Canvas.Top="288">注释</TextBlock>
        <TextBox Name="textBox_Desc" Canvas.Left="488" Canvas.Top="284" Width="175" Height="60"></TextBox>

        <TextBlock Name="textBlock_Camera" Canvas.Left="418" Canvas.Top="348">摄像头信息</TextBlock>
        <ScrollViewer Canvas.Left="418" Canvas.Top="368" Width="245" Height="110">
            <StackPanel>
                <ListView Name="listView_AllCamera" GridViewColumnHeader.Click="GridViewColumnSortByID" >
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="50" Header="序号" DisplayMemberBinding="{Binding Path = CameraID}">

                            </GridViewColumn>

                            <GridViewColumn Width="70" Header="名称" DisplayMemberBinding="{Binding Path = CameraName}">

                            </GridViewColumn>

                            <GridViewColumn Width="60" Header="描述" DisplayMemberBinding="{Binding Path = CameraDesc}">

                            </GridViewColumn>

                            <GridViewColumn Width="45" Header="启用">
                                <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                        <CheckBox IsChecked="{Binding IsEnable, Mode = OneWay}"></CheckBox>
                                </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            
                        </GridView>
                    </ListView.View>
                </ListView>
            </StackPanel>
        </ScrollViewer>
        
        <!-- 管理设备按钮以后位置需要重新设置的 -->
        <Button Name="button_Device" Click="button_manageDevice" Width="80" Canvas.Left="703" Canvas.Top="373" >管理设备</Button>
        
        <Button Name="okButton_Device" Visibility="Hidden" Click="okButton_NewDevice"  Width="50" Canvas.Left="430" Canvas.Top="500">确定</Button>
        <Button Name="cancelButton_Device" Visibility="Hidden" Click="cancelButton_NewDevice" Width="50" Canvas.Left="600" Canvas.Top="500">取消</Button>
        <Button Name="updateButton_Device" Visibility="Hidden" Width="80"  Click="updateButton_NewDevice" Canvas.Left="420" Canvas.Top="500">修改资料</Button>
        <Button Name="okUpdateButton_Device" Visibility="Hidden" Width="80" Click="okUpdateButton_NewDevice" Canvas.Left="420" Canvas.Top="500">确认修改</Button>
        <Button Name="okButton_deleteDevice" Visibility="Hidden" Width="80" Click="button_DeleteButton" Canvas.Left="580" Canvas.Top="500">删除设备</Button>
    </Canvas>

</Controls:MetroWindow>

下面是c#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.ComponentModel;

using MahApps.Metro.Controls;

using spph.Model;
using spph.Common;

using spph.DBInterface;

namespace spph
{
    /// <summary>
    /// DeviceWindow.xaml 的交互逻辑
    /// </summary>
    public partial class DeviceWindow : MetroWindow
    {
        //全局变量
        private ObservableCollection<UserModel> AllUserModel { get; set; }
        private ObservableCollection<DeviceModel> AllDeviceModel { get; set; }
        private ObservableCollection<Camera> AllCamera { get; set; }

        //初始化全局变量AllDeviceModel
        private void InitAllDeviceModel()
        {
            AllDeviceModel = new ObservableCollection<DeviceModel>();
            List<Int32> deviceID_list = Batch.GetAllDeviceID();
            foreach (Int32 deviceID in deviceID_list)
            {
                DeviceModel deviceModel = new DeviceModel(deviceID);
                AllDeviceModel.Add(deviceModel);
            }
        }

        //初始化全局变量AllUserModel
        private void InitAllUserModel()
        {
            AllUserModel = Batch.readAllUserModel();
        }

        //初始化全局变量AllCamera
        private void InitAllCamera()
        {
            AllCamera = Batch.readAllCamera();
        }

        public DeviceWindow()
        {
            InitializeComponent();
            
            InitAllCamera();
            this.listView_AllCamera.ItemsSource = AllCamera;
            //ItemsSource="{Binding AllCamera}"这句话放在xml中,居然没有显示,奇怪的???,所以用上面那句话加以显示

            
            
            
            
            
            
            //初始化设备界面ListBox,左侧加以显示设备列表
            //点击主窗口设备按钮——反应时间过长,查阅对于数据库中存在的每一个id数据库两次 -- 需要修改的
            InitAllDeviceModel();           //点击主窗口设备按钮——反应时间过长          
            this.listBox_DeviceName.ItemsSource = AllDeviceModel;
            this.listBox_DeviceName.DisplayMemberPath = "DeviceName";

            //初始化设备负责人,这里觉得没有必要使用UserModel类,这里只需要name和ID属性,其中name是加以显示,ID存储之用的
            //后面和可以问问师傅,代码可以优化的
            InitAllUserModel();
            this.comboBox_DeviceUser.ItemsSource = AllUserModel;
            this.comboBox_DeviceUser.DisplayMemberPath = "Name";

            this.textBox_DeviceName.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DeviceName") { Source = this.listBox_DeviceName });
            this.textBox_DeviceID.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DeviceID") { Source = this.listBox_DeviceName });
            this.textBox_Server.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DeviceIP") { Source = this.listBox_DeviceName });
            this.textBox_Port.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DevicePort") { Source = this.listBox_DeviceName });

            this.textBox_Password.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DevicePwd") { Source = this.listBox_DeviceName });

            this.textBox_DeviceUser.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.DeviceUser") { Source = this.listBox_DeviceName });
            this.textBox_Desc.SetBinding(System.Windows.Controls.TextBox.TextProperty,
                new System.Windows.Data.Binding("SelectedItem.Desc") { Source = this.listBox_DeviceName });
            
        }

        //显示设备详细信息
        public void showDeviceInfo(object sender, EventArgs e)
        {
            textBlock_DeviceID.Visibility = Visibility.Visible;
            textBox_DeviceID.Visibility = Visibility.Visible;
            
            comboBox_DeviceUser.Visibility = Visibility.Hidden;
            textBox_DeviceUser.Visibility = Visibility.Visible;

            okButton_Device.Visibility = Visibility.Hidden;
            okUpdateButton_Device.Visibility = Visibility.Hidden;
            cancelButton_Device.Visibility = Visibility.Hidden;
            updateButton_Device.Visibility = Visibility.Visible;           
            okButton_deleteDevice.Visibility = Visibility.Visible;

            if (this.textBox_Password.Text.ToString().Length == 0)
            {
                this.passwordBox_Password.Clear();
            }
            else
            {
                this.passwordBox_Password.Password = AESSymmetricEncryption.AESDecrypt(this.textBox_Password.Text.ToString());
            }

         
        }

        //新建设备详细信息 -- 点击新建个人资料按钮相应
        public void newDeviceInfo(object sender, EventArgs e)
        {
            updateButton_Device.Visibility = Visibility.Hidden;
            okUpdateButton_Device.Visibility = Visibility.Hidden;
            okButton_deleteDevice.Visibility = Visibility.Hidden;
            okButton_Device.Visibility = Visibility.Visible;
            cancelButton_Device.Visibility = Visibility.Visible;

            textBox_DeviceUser.Visibility = Visibility.Hidden;
            textBlock_DeviceID.Visibility = Visibility.Hidden;
            textBox_DeviceID.Visibility = Visibility.Hidden;
            comboBox_DeviceUser.Visibility = Visibility.Visible;
    
            textBox_DeviceName.Clear();
            textBox_DeviceID.Clear();
            textBox_Server.Clear();
            textBox_Port.Clear();
            passwordBox_Password.Clear();
            textBox_DeviceUser.Clear();
            textBox_Desc.Clear();        
        }

        //新建设备详细信息 --- 点击确认按钮相应
        public void okButton_NewDevice(object sender, EventArgs e)
        {
            //判断端口号是否合法
            if ((Convert.ToInt32(textBox_Port.Text.ToString()) < 1024) ||
                        (Convert.ToInt32(textBox_Port.Text.ToString()) > 49151))
            {
                System.Windows.Forms.MessageBox.Show("端口号设置不正确", " ", MessageBoxButtons.OK);
                return;
            }

            //判断IP地址是否合法 --- 也可以考虑使用正则表达式
            string[] ipStr = textBox_Server.Text.ToString().Split('.');
            if (ipStr.Length != 4
                || (Convert.ToInt16(ipStr[0]) != 192)
                || (Convert.ToInt16(ipStr[1]) != 168)
                || (Convert.ToInt16(ipStr[2]) > 256 || Convert.ToInt16(ipStr[2]) < 0)
                || (Convert.ToInt16(ipStr[3]) > 256 || Convert.ToInt16(ipStr[3]) < 0))
            {
                System.Windows.Forms.MessageBox.Show("服务器地址设置不正确", " ", MessageBoxButtons.OK);
                return;
            }

            DialogResult dr = System.Windows.Forms.MessageBox.Show("确定新建吗?", " ", MessageBoxButtons.OKCancel);
            string password = AESSymmetricEncryption.AESEncrypt(passwordBox_Password.Password.ToString());
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                Device device = new Device();
                device.InitDevice(textBox_DeviceName.Text.ToString(),
                    textBox_Server.Text.ToString(),
                    Convert.ToInt32(textBox_Port.Text.ToString()),
                    textBox_DeviceUser.Text.ToString(),
                    password,
                    textBox_Desc.Text.ToString(),
                    true                            //这里存在一定的问题,注意
                    );

                string str = AESSymmetricEncryption.AESDecrypt(password);
                device.InsertDeviceItem();
            }
            DB.getIdAndNameFromDevice();
          
            //刷新左侧显示
            InitAllDeviceModel();
            this.listBox_DeviceName.ItemsSource = AllDeviceModel;
            this.listBox_DeviceName.DisplayMemberPath = "DeviceName";

            updateButton_Device.Visibility = Visibility.Hidden;
            okUpdateButton_Device.Visibility = Visibility.Hidden;
            okButton_deleteDevice.Visibility = Visibility.Hidden;
            okButton_Device.Visibility = Visibility.Hidden;
            cancelButton_Device.Visibility = Visibility.Hidden;

            System.Windows.MessageBox.Show("新建设备信息成功", "", System.Windows.MessageBoxButton.OK);

        }

        //新建设备信息信息 --- 点击取消按钮相应
        public void cancelButton_NewDevice(object sender, EventArgs e)
        {
            DialogResult dr = System.Windows.Forms.MessageBox.Show("确定取消?", " ", MessageBoxButtons.OKCancel);
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                textBox_DeviceName.Clear();
                textBox_DeviceID.Clear();
                textBox_Server.Clear();
                textBox_Port.Clear();
                passwordBox_Password.Clear();
                textBox_DeviceUser.Clear();
                textBox_Desc.Clear();
            }
        }

        //修改设备信息 -- 点击修改资料按钮相应
        //            -- 无任何内容,以后会加以调整
        public void updateButton_NewDevice(object sender, EventArgs e)
        {
            textBlock_DeviceID.Visibility = Visibility.Hidden;
            textBox_DeviceID.Visibility = Visibility.Hidden;
            updateButton_Device.Visibility = Visibility.Hidden;
            okUpdateButton_Device.Visibility = Visibility.Visible;
        }

        //修改设备信息 -- 点击确认修改按钮相应
        public void okUpdateButton_NewDevice(object sender, EventArgs e)
        {
            DeviceModel dM = (DeviceModel)listBox_DeviceName.SelectedItem;

            dM.DeviceName = textBox_DeviceName.Text;
            dM.DeviceID = Convert.ToInt32(textBox_DeviceID.Text.ToString());
            dM.DeviceIP = textBox_Server.Text;
            dM.DevicePort = Convert.ToInt32(textBox_Port.Text.ToString());
            //初版而已————————之后是需要修改的
            dM.DeviceUser = textBox_DeviceUser.Text.ToString();
            dM.DeviceDesc = textBox_Desc.Text.ToString();
            dM.UpdateDeviceItem();

            DB.getIdAndNameFromDevice();                //更新左侧列表(用户可能修改设备名称,所以需要刷新)
            System.Windows.MessageBox.Show("修改设备信息成功", "", System.Windows.MessageBoxButton.OK);
        }

        //删除设备信息 -- 点击确认修改按钮相应
        public void button_DeleteButton(object sender, EventArgs e)
        {          
            DialogResult dr = System.Windows.Forms.MessageBox.Show("确定删除设备吗?", " ", MessageBoxButtons.OKCancel);
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                Device device = new Device();
                device.DeleteDeviceItem(Convert.ToInt32(textBox_DeviceID.Text.ToString()));
            }

            //刷新左侧显示
            InitAllDeviceModel();
            this.listBox_DeviceName.ItemsSource = AllDeviceModel;
            this.listBox_DeviceName.DisplayMemberPath = "DeviceName";

            updateButton_Device.Visibility = Visibility.Hidden;
            okUpdateButton_Device.Visibility = Visibility.Hidden;
            okButton_deleteDevice.Visibility = Visibility.Hidden;
            okButton_Device.Visibility = Visibility.Hidden;
            cancelButton_Device.Visibility = Visibility.Hidden;

            System.Windows.Forms.MessageBox.Show("删除设备成功", " ", MessageBoxButtons.OK);
        }

        //管理设备按钮,点击创建新的窗口
        public void button_manageDevice(object sender, EventArgs e)
        {

        }

        //自定义排序规则
        private void CameraSort(System.Windows.Controls.ListView lv, string id_string, ListSortDirection direction)
        {
            ICollectionView dataView = CollectionViewSource.GetDefaultView(lv.ItemsSource);//获取数据源视图
            dataView.SortDescriptions.Clear();//清空默认排序描述
            SortDescription sd = new SortDescription(id_string, direction);
            dataView.SortDescriptions.Add(sd);//加入新的排序描述
            dataView.Refresh();//刷新视图
        }


        //根据ID号码排序
        private void GridViewColumnSortByID(object sender, RoutedEventArgs e)
        {
            GridViewColumnHeader gch = e.OriginalSource as GridViewColumnHeader;
            CameraSort(this.listView_AllCamera, "CameraID", ListSortDirection.Ascending);
        }

    }
}

程序是无法运行的,大家看代码主要看的是方法,绑定技术等等。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值