我在 WPF 程序中使用 CommunityToolkit 中的 ObservableObject。看起来像这样:
我认为它就像一个 ViewModel:
public class MyParameters: ObservableObject
{
// many other values are here
public double ValAngleDegrees { get; set;}
}
控件如下所示:
<StackPanel x:Name="AnglePanel" Orientation="Horizontal" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2">
<TextBox Name="TxtAngleDeg" Width="100" Margin="2" Text="{Binding Path=ValAngleDegrees, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" KeyUp="TxtAngleDeg_KeyUp"></TextBox>
</StackPanel>
我这样初始化它:
public MyParameters renderValues { get; set; }
public MainWindow()
{
InitializeComponent();
renderValues = new MyParameters { ValAngleDegrees = 0 };
AnglePanel.DataContext = renderValues;
}
当我更改文本框中的值时,ObservableObject 中的值会按预期更改,但问题是 - 当我更改代码中的值时,它在 UI 中不会更改。我该如何解决这个问题?
您需要调用属性设置器中的
SetProperty
。它将从 PropertyChanged
界面触发 INotifyPropertyChanged
。 UI 控件在此事件上注册,因此会触发它来更新 UI。
public class User : ObservableObject
{
private string name;
public string Name
{
get => name;
set => SetProperty(ref name, value);
}
}
ObservableProperty
属性来生成带有更改通知的属性:
public partial class MyParameters: ObservableObject
{
[ObservableProperty]
private double valAngleDegrees;
}