WPF数据绑定(要是后台类对象的属性值发生改变,通知在“client界面与之绑定的控件值”也发生改变须要实现INotitypropertyChanged接口)

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<TextBox Text="{Binding Name}" Height="23" HorizontalAlignment="Left" Margin="122,68,0,0" Name="txtName" VerticalAlignment="Top" Width="120" />
<TextBox Text="{Binding Age}" Height="23" HorizontalAlignment="Left" Margin="122,124,0,0" Name="txtAge" VerticalAlignment="Top" Width="120" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="82,71,0,0" Name="textBlock1" Text="姓名" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="82,127,0,0" Name="textBlock2" Text="年龄" VerticalAlignment="Top" />
<Button Content="Age++" Height="23" HorizontalAlignment="Left" Margin="262,71,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<Button Content="显示Age" Height="23" HorizontalAlignment="Left" Margin="262,124,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
</Grid>
</Window>

MainWindow.xaml.cs

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.Navigation;
using System.Windows.Shapes; namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
Person p1 = new Person();
public MainWindow()
{
InitializeComponent();
} private void Window_Loaded(object sender, RoutedEventArgs e)
{
p1.Name = "李大钊";
p1.Age = 28; txtName.DataContext = p1;
txtAge.DataContext = p1;
} private void button1_Click(object sender, RoutedEventArgs e)
{
p1.Age++;
} private void button2_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((p1.Age).ToString());
}
}
}

Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel; namespace WpfApplication1
{
/// <summary>
/// INotifyPropertyChanged接口是向client发出某一属性值已经更改的通知
/// INotifyPropertyChanged是.net内置的接口,数据绑定DataContext是否实现了INotityPropertyChanged接口,假设实现了,就会监听PropertyChanged得知属性的变化
/// 假设要求后台对象的值发送改变,界面的值也跟着变,则须要实现INotityPropertyChanged接口。而且在对象属性值变化后触发事件
/// 假设说后台对象的值会不变,则没有必要实现这个接口
/// </summary>
public class Person:INotifyPropertyChanged
{
private string name;
public string Name
{
get
{
return name;
} set
{
this.name = value;
if (PropertyChanged != null)
{ //假设Name属性发生了改变,则触发这个事件
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
} private int age;
public int Age
{
get
{
return age;
} set
{
this.age = value;
//假设有人(数据绑定的对象来监听的)监听这个事件(假设有人监听就是不等于null,假设没人监听这个事件就等于null)
if (PropertyChanged != null)
{
//假设Age属性发生了改变,则触发这个事件
PropertyChanged(this,new PropertyChangedEventArgs("Age"));
}
}
} public event PropertyChangedEventHandler PropertyChanged; }
}

INotitypropertyChanged的更多相关文章

  1. WPFS数据绑定(要是后台类对象的属性值发生改变,通知在“client界面与之绑定的控件值”也发生改变须要实现INotitypropertyChanged接口)

    WPFS数据绑定(要是后台类对象的属性值发生改变,通知在"client界面与之绑定的控件值"也发生改变须要实现INotitypropertyChanged接口) MainWindo ...

  2. WPF入门:数据绑定

    上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...

随机推荐

  1. Entity Framework 学习记录

    msdn  :https://msdn.microsoft.com/zh-cn/data/ee712907.aspx code first 入门: https://msdn.microsoft.com ...

  2. leetcode-95-不同的二叉搜索树②*

    题目描述: 方法一:递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self. ...

  3. PDO连续query()失败问题

    设置了非缓冲查询(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY)以后,连续query会导致下一次结果为false $conn = "mysql:host=127.0. ...

  4. 解决git每次输入密码,设置gitlab、github默认push的用户名和密码

    git ssh key配置&解决git每次输入密码   欢迎加入qq群(IT-程序猿-技术交流群):757345416 在使用git时,每次pull/push都需要输入密码,有时大大降低了我们 ...

  5. Android基础控件TextClock和Chronometer的使用

    1.简介 DigitalClock, TextClock,AnalogClock,Chronometer其中DigitalClock和AnalogClock废弃了! TextClock是在Androi ...

  6. java调js基础

    public static void main(String[] args)throws Exception { ScriptEngine se = new ScriptEngineManager() ...

  7. 在VisualSVN创建新的Repository

    1,右键-创建 2,(暂时还没明白这两个选项的区别,暂时先使用第一个) 3, 库名称 4,(也不懂具体含义, 先默认) 5, 权限问题 6, 在需要用到这个库的工作文件夹内点击右键: -SVN检出 7 ...

  8. WebSockets

    WebSocket 是为了在一个单独的持久连接上提供全双工的双向通信.有关WebSocket API的内容可以参考这里. 这里简单说明下WebSocket在javascript中的用法. 1 WebS ...

  9. commons-httpclient和org.apache.httpcomponents的区别

    <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpc ...

  10. js实现事件监听与阻止监听传播

    监听事件: 使用attachEvent(用于IE)和addEventListener(用于谷歌.火狐)时则可以实现多个事件处理函数的调用 1.下面都是dom对象的方法,可以实现一种事件绑定多个事件处理 ...