在WPF中如果同时在两个线程中对同一个控件进行操作会引发错误,Winform里需要写一个委托,WPF里的绑定功能可以解决这个问题,但是一般做法都需要在xmal代码里写一个绑定语句,但是为了更好的将界面和逻辑分离,可以采用下面的方法实现绑定。
1.创建控件
首先创建一个项目。
在xmal中创建一个TextBox和一个Button,为了将数据与TextBox绑定,需要为TextBox起名,本例将其命名为“show”.
代码如下:
<Grid> <TextBox x:Name="show" HorizontalAlignment="Left" Height="85" Margin="115,35,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="280"/> <Button Content="Button" HorizontalAlignment="Left" Height="85" Margin="115,140,0,0" VerticalAlignment="Top" Width="280" Click="Button_Click"/> Grid>
2.绑定控件
1.创建数据类
class Source : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string data; public string Data { get { return data; } set { data = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Data")); } } } }
创建这个类是为了给后面数据绑定提供数据源。这个类中的数据名称下图中1、2要保持一致;3、4、5要保持一致。
2.数据与控件绑定
套路式添加代码如下:
Source _Source; public MainWindow() { InitializeComponent(); _Source = new Source();//实例化一个数据源 Binding bind = new Binding();//实例化一个绑定 bind.Source = _Source;//设置绑定的源(前面实例化的数据源) bind.Path = new PropertyPath("Data");//设置绑定路径 BindingOperations.SetBinding(show, TextBox.TextProperty, bind);//执行绑定操作,参数:控件名称、要修改的控件类属性、绑定 }
注意:上图中绑定路径里的数据名称要和数据源里的数据名称保持一致。
至此,已经将_Source.Data和控件show的Text属性绑定,修改_Source.Data的值,控件里的显示文本会随之改变。
3.验证绑定
单击UI里的Button控件,实现向控件show里写入文本。代码如下:
private void Button_Click(object sender, RoutedEventArgs e) { _Source.Data += "aaaa"; }
运行程序,效果如下: