.Netformwork4.0及以下版本 -------INotifyPropertyChanged

命名空间: System.ComponentModel

后台代码

public partial class DvrWnd : UserControl
{
public DvrWnd()
{
InitializeComponent();
} private void InitInfo()
{
for (int i = 0; i < 10; i++)
{
DvrInfo dvrInfo = new DvrInfo();
dvrInfo.strDvrName = "编码器" + i.ToString();
dvrInfo.strDvrIp = "10.10.13.10" + i.ToString();
dvrInfo.strDvrPort = "506" + i.ToString();
dvrInfo.strDvrType = "Type " + i.ToString();
dvrInfo.strDvrCode = "340201030002150000" + i.ToString();
dvrInfoList.Items.Add(dvrInfo);
}
} private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
dvrInfoList.Items.Clear();
InitInfo();
} //编码器信息, 只要改了类中的属性, 就能随便用
public class DvrInfo : INotifyPropertyChanged
{
private string m_strDvrIp = string.Empty;
private string m_strDvrPort = string.Empty;
private string m_strDvrName = string.Empty;
private string m_strDvrType = string.Empty;
private string m_strDvrCode = string.Empty;
public string strDvrIp
{
set
{
if (m_strDvrIp != value)
{
m_strDvrIp = value;
}
OnPropertyChanged("strDvrIp");
}
get
{
return m_strDvrIp;
}
}
public string strDvrPort
{
set
{
if (m_strDvrPort != value)
{
m_strDvrPort = value;
OnPropertyChanged("strDvrPort");
}
}
get
{
return m_strDvrPort;
}
}
public string strDvrName
{
set
{
if (m_strDvrName != value)
{
m_strDvrName = value;
OnPropertyChanged("strDvrName");
}
}
get
{
return m_strDvrName;
} }
public string strDvrType
{
set
{
if (m_strDvrType != value)
{
m_strDvrType = value;
OnPropertyChanged("strDvrType");
}
}
get
{
return m_strDvrType;
} }
public string strDvrCode
{
set
{
if (m_strDvrCode != value)
{
m_strDvrCode = value;
OnPropertyChanged("strDvrCode");
}
}
get
{
return m_strDvrCode;
}
} public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string strPropertyInfo)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(strPropertyInfo));
}
}
}

  

  前端代码绑定

<UserControl x:Class="testDevice.DvrWnd"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Background="White"
Loaded="UserControl_Loaded"
>
<Grid>
<DataGrid Name="dvrInfoList" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="编码器名" IsReadOnly="True" Width="2*" Binding ="{Binding strDvrName}" />
                  //红色标记部分为OnPropertyChanged("strDvrName");中strDvrName, 并不是DvrInfo.strDvrName中的strDvrName <DataGridTextColumn Header="编码器IP" Width="*" IsReadOnly="True" Binding="{Binding strDvrIp}"/> <DataGridTextColumn Header="编码器Port" Width="*" IsReadOnly="True" Binding="{Binding strDvrPort}"/> <DataGridTextColumn Header="编码器类型" Width="*" IsReadOnly="True" Binding="{Binding strDvrType}"/> <DataGridTextColumn Header="编码器编码" Width="2*" IsReadOnly="True" Binding="{Binding strDvrCode}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>

  

  

.Netformwork4.5及以上版本 -------INotifyPropertyChanged,CallerMemberName

命名空间: System.ComponentModel

      System.Runtime.CompilerServices

后台代码:

        public CvrWnd()
{
InitializeComponent();
} private void InitInfo()
{
for (int i = 0; i < 10; i++)
{
CvrInfo cvrInfo = new CvrInfo();
cvrInfo.strCvrName = "磁盘阵列" + i.ToString();
cvrInfo.strCvrIP = "10.10.13.10" + i.ToString();
cvrInfo.strCvrPort = "506" + i.ToString();
cvrInfo.strCvrType = "Type " + i.ToString();
cvrInfo.strCvrCode = "340201030002150000" + i.ToString();
cvrInfoList.Items.Add(cvrInfo);
}
} private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
cvrInfoList.Items.Clear();
InitInfo();
} //磁盘阵列信息
public class CvrInfo : INotifyPropertyChanged
{
private string m_strCvrIP = string.Empty;
private string m_strCvrPort = string.Empty;
private string m_strCvrName = string.Empty;
private string m_strCvrType = string.Empty;
private string m_strCvrCode = string.Empty; public string strCvrIP
{
set
{
UpdateProperty(ref m_strCvrIP, value);
}
get
{
return m_strCvrIP;
}
}
public string strCvrPort
{
set
{
UpdateProperty(ref m_strCvrPort, value);
}
get
{
return m_strCvrPort;
}
}
public string strCvrName
{
set
{
UpdateProperty(ref m_strCvrName, value);
}
get
{
return m_strCvrName;
}
}
public string strCvrType
{
set
{
UpdateProperty(ref m_strCvrType, value);
}
get
{
return m_strCvrType;
}
}
public string strCvrCode
{
set
{
UpdateProperty(ref m_strCvrCode, value);
}
get
{
return m_strCvrCode;
}
} private void UpdateProperty<T>(ref T properValue, T newValue, [CallerMemberName] string propertyName = "")
{
if (object.Equals(properValue, newValue))
{
return;
}
properValue = newValue; OnPropertyChanged(propertyName);
} public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
} }
}

  前台代码:

    <Grid>
<DataGrid Name="cvrInfoList" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="磁盘阵列名" Width="*" Binding="{Binding strCvrName}" />
                                        //strCvrName 为CvrInfo.strCvrName
<DataGridTextColumn Header="磁盘阵IP" Width="*" Binding="{Binding strCvrIP}" />
<DataGridTextColumn Header="磁盘阵Port" Width="*" Binding="{Binding strCvrPort}" />
<DataGridTextColumn Header="磁盘阵类型" Width="*" Binding="{Binding strCvrType}" />
<DataGridTextColumn Header="磁盘阵编码" Width="*" Binding="{Binding strCvrCode}" />
</DataGrid.Columns>
</DataGrid>
</Grid>

  以上两种方法都可以进行数据绑定(datagrid, treeview等控件都行), 界面刷新, 第一种方法是在.netfromwork中的4.0的版本支持, 该方法的缺点是当类的属性多了, 如果后期突然改动一下OnPropertyChanged(value)中的value, 界面就不能同步, 而且感觉每个属性都要那么一行代码总感觉怪怪的, 第二种方法是在.netformwork4.5版本支持,避过了方法一种所有的缺点,GG

WPF 数据绑定,界面刷新的两种方法-----INotifyPropertyChanged的更多相关文章

  1. JqueryMobile动态生成listView并实现刷新的两种方法

    本篇文章主要是对JqueryMobile动态生成listView并实现刷新的两种方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JqueryMobile动态生成listView并实现刷新 ...

  2. 上拉刷新和下拉刷新的两种方法(包括使用第三方库MJRefresh)

    一.使用苹果原生的方法 1.下拉刷新 2.上拉刷新 (1 首先要新建一个footer得XIB文件,当然同时包括对应的控制器文件,例如在XIB文件中可以如下拖拉对应的控件 (2 然后在代码文件中写一个实 ...

  3. iframs刷新的两种方法

    <iframe src="a1.html" id="iframe1Id" name="iframe1Name" width=" ...

  4. WPF中打开网页的两种方法

    1.浏览器打开 Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "http://www. ...

  5. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  6. WPF多线程UI更新——两种方法

    WPF多线程UI更新——两种方法 前言 在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对 ...

  7. 在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法。

    在vc6.0下编的对话框界面如果没做过其他处理,往往显的很生硬,怎么样才能使他有Windows XP的风格呢,其实也很简单,我们来看看下面两种方法.    方法一: 1.首先确认你在Windows   ...

  8. 用easyui实现查询条件的后端传递并自动刷新表格的两种方法

    用easyui实现查询条件的后端传递并自动刷新表格的两种方法 搜索框如下: 通过datagrid的load方法直接传递参数并自动刷新表格 通过ajax的post函数传递参数并通过loadData方法将 ...

  9. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

随机推荐

  1. R数据挖掘 第一篇:聚类分析(划分)

    聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类.在相同的数据集上, ...

  2. 一个JS正则的字符串替换函数

    直接上函数吧  不废话 function replacestring(oldstr,newstr,text) { var exp = new RegExp(oldstr,'g'); var c=tex ...

  3. “sgen.exe”未能运行。文件名或扩展名太长

    问题 创建项目后无法运行 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB6003 指定的任务可执行文件"sgen.exe"未能运行.System.Component ...

  4. c#ADO.NET 执行带参数及有返回数据

    直接上代码,这个过程中有个数据SqlDataReader转为 DataTable的过程,当中为什么这样,是应为我直接绑定DataSource的时候没有数据,网人家说直接绑定但是没效果,我就转换了一下. ...

  5. c# 项目nuget不自动安装dll

    问题 创建的项目提交到服务器上,其他人下载项目后无法生成解决方案成功,无法自动生成dll,无法自动下载安装相应的插件 解决方案 删除packages文件夹即可,nuget就可以自动安装相关的dll了

  6. 实现个虚拟机只要几百行的 toy 版就够了

    关键是 指令 的 eval 并把 高层代码进行翻译. 典型的项目: 1.  java-compiler (C++) 2. 手把手教你构建 C 语言编译器(0)- 前言 | 三点水  (C)

  7. ubuntu与centos系统对比

    CentOS与Ubuntu该如何选择,哪个更好用.笔者在自媒体平台收集了一些网友的观点,较为经典,分享给大家.至于应该选择哪个,希望看完本文章后,读者心中有数. 观点1:CentOS适用于服务器,Ub ...

  8. uni-app采坑记录

    1. uni-app采坑记录 1.1. 前言 这里记录下uni-app实践中踩的坑 1.2. 坑点 1.2.1. 触发事件@longTap和@longpress 这两个都表示长按触发事件,那么这两个有 ...

  9. iperf3 网络测试工具

    Iperf3 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽.延迟抖动和数据包丢失.对于每个测试,它都会报告带宽,丢包和 ...

  10. 0x02 Python logging模块利用配置加载logger

    目录 logging模块利用配置加载logger 方式一模板:logging.config.dictConfig(config_dict) logging模块利用配置加载logger logging. ...