我有一个带有标签的主窗口。
<Label
Name="RoundLabel"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Content="{Binding Source={x:Static core:Supervisor.Simulator}, Path=Round, UpdateSourceTrigger=Explicit, Mode=TwoWay}"
/>
在代码隐藏中,有一种方法可以更新lablecontent
public void updateRound()
{
BindingExpression binding = RoundLabel.GetBindingExpression(Label.ContentProperty);
binding.UpdateSource();
}
在另一课程中,我致电updateRound
public int Round
{
get
{
return round.Value;
}
set
{
if (!(round.Value == value))
{
round.Value = value;
App.Current.Dispatcher?.Invoke(() => (App.Current.MainWindow as MainWindow).updateRound());
}
}
因此每次圆形更改的值都应在标签中更改。 没有例外,但GUI中的圆形数字不是更新。
我的错误在哪里?什么都错过了?
答案 0 :(得分:0)
通知WPF通常通过实现INotifyPropertyChanged
接口来完成对已更改的源属性值的绑定:
public class Simulator : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int round;
public int Round
{
get
{
return round;
}
set
{
if (round != value)
{
round = value;
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(nameof(Round)));
}
}
}
}
现在将Simulator类的一个实例放入窗口的DataContext
,然后像这样绑定一个Label Content
:
<Window ...>
<Window.DataContext>
<local:Simulator/>
</Window.DataContext>
<Grid>
<Label Content="{Binding Round}"/>
</Grid>
</Window>
通过访问DataContext中的对象来设置代码中的属性:
((Simulator)DataContext).Round = 42;