C# Wpf双向绑定实例

时间:2023-03-09 04:46:21
C# Wpf双向绑定实例

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 = };
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双向绑定实例

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

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

TestData类定义同上

Xaml定义同上

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

C# Wpf双向绑定实例