Wpf中双向绑定处理需要两处

实例1:

1.前台Xaml中属性Binding 时Model指定 TwoWay


<Grid>     <Ellipse  x:Name="ellipse"         Fill="#FFF4F4F5" HorizontalAlignment="Left"                  Height="{Binding Path=Number,Mode=TwoWay}" Margin="50,55,0,0" Stroke="Black"                 VerticalAlignment="Top" Width="{Binding Path=Number,Mode=TwoWay}"/>     <Slider x:Name="slider"  Margin="28,167,22,0" ValueChanged="slider_ValueChanged"             VerticalAlignment="Top" TickPlacement="Both" Maximum="100" SmallChange="1"/>     <Label x:Name="label" Content="{Binding Path=Number,Mode=TwoWay}" HorizontalAlignment="Left" Margin="110,150,0,0" VerticalAlignment="Top"/> </Grid>


2.后台绑定的数据上线文实现INotifyPropertyChanged(向客户端发出某一属性值已更改的通知。)接口


/// <summary> /// Thread6.xaml 的交互逻辑 /// </summary> public partial class Thread6 : Window {      TestData testData = new TestData() { Number = 10 };     public Thread6()     {         InitializeComponent();         //创建双向绑定         ellipse.DataContext = testData;         label.DataContext = testData;     }     private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)     {         testData.Number = (int)e.NewValue;     } }


public class TestData : INotifyPropertyChanged {     private int _Number;     public int Number     {         get         {             return _Number;         }         set         {             _Number = value;             if (this.PropertyChanged != null)             {                 this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Number"));             }         }     }     public event PropertyChangedEventHandler PropertyChanged; }


显示结果:

C# Wpf双向绑定实例_ide

实例2:使用Wpf的双向绑定机制,可以实现多线程修改UI

注:其他线程修改绑定数据时会通知到UI线程修改界面数据。

TestData类定义同上

Xaml定义同上


//创建双向绑定 ellipse.DataContext = testData; //创建线程修改数据 Task.Run(() => {     while (true)     {         testData.Number++;         if (testData.Number == 200)             testData.Number = 0;         Thread.Sleep(100);     } });


C# Wpf双向绑定实例_Wpf双向绑定_02