绑定到非元素对象
唯一的要求是希望显示的信息必须存储在公有属性中。WPF数据绑定基础结构不能获取私有信息或公有字段。
<Window x:Class="Wpf_ObservableCollection.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Wpf_ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="200" Width="200">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="NameText" Grid.Column="0" Text="{Binding Data}"/>
<Button Content="Chagne Data" x:Name="ChagneData" Grid.Column="1" Click="ChagneData_Click"/>
</Grid>
</Window>
using System.ComponentModel;
using System.Windows;
namespace Wpf_ObservableCollection
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
string data = "init";
public string Data
{
get { return data; }
set
{
data = value;
//激发事件
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data"));
}
}
}
private void ChagneData_Click(object sender, RoutedEventArgs e)
{
Data = "change";
}
}
}
注意点:
1、INotifyPropertyChanged接口;
2、修改时使用大写的Data(这是属性,公开的属性;而公开的字段不能作为绑定源),才能触发事件;