下面是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);
}
}
}
程序是无法运行的,大家看代码主要看的是方法,绑定技术等等。