如何使 ObservableObject 派生类的更改自动反映到接口中?

问题描述 投票:0回答:2

我在 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 中不会更改。我该如何解决这个问题?

c# wpf mvvm community-toolkit-mvvm
2个回答
3
投票

您需要调用属性设置器中的

SetProperty
。它将从
PropertyChanged
界面触发
INotifyPropertyChanged
。 UI 控件在此事件上注册,因此会触发它来更新 UI。

public class User : ObservableObject
{
    private string name;

    public string Name
    {
        get => name;
        set => SetProperty(ref name, value);
    }
}

来源:ObservableObject


1
投票

您可以使用

ObservableProperty
属性来生成带有更改通知的属性:

public partial class MyParameters: ObservableObject
{
    [ObservableProperty]
    private double valAngleDegrees;
}
© www.soinside.com 2019 - 2024. All rights reserved.