gpt4 book ai didi

c# - MVVM ViewModel 级联属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:53 28 4
gpt4 key购买 nike

我有一个具有属性 A、B、C 和 D 的 View 模型。其中 D 是 A、B 和 C 的总和。因此,无论何时发生任何更改,我都希望更新 D。我知道我可以通过观察 A、B、C 上的 PropertyChanged 事件然后设置 D 的值来做到这一点,如下所示:

public MyViewModel()
{
this.PropertyChanged += ViewModelPropertyChanged;
}

private void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
// Track changes to update sum
if (e.PropertyName == "A" || e.PropertyName == "B" || e.PropertyName == "C")
{
D = A + B + C;
}
}

但我想知道是否存在更优雅或更自动化的方法?

更新此以添加属性示例。我正在使用一个封装以下逻辑的框架:不同并引发属性更改事件。

    private int _A;
public int A
{
get { return _A; }
set { RaiseAndSetIfChanged(ref _A, value); }
}

更新 #2:有没有人有示例说明如何使用 ReactiveUI 实现这一点?

最佳答案

与其在你的 ViewModelPropertyChanged 中做实际的数学运算,不如做类似的事情

private void ViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
// Track changes to update sum
if (e.PropertyName == "A" || e.PropertyName == "B" || e.PropertyName == "C")
{
OnPropertyChanged("D");
}
}

然后在属性本身中进行数学运算

public int D
{
get
{
return A + B + C;
}
}

或者您可以这样做(这是我更喜欢的一种,请参阅下面的评论)

public int A
{
get { return a; }
set
{
if (value == a) return;
a = value;
OnPropertyChanged("A");
OnPropertyChanged("D");
}
}

public int B
{
get { return b; }
set
{
if (value == b) return;
b = value;
OnPropertyChanged("B");
OnPropertyChanged("D");
}
}

等等

再一次

public int D
{
get
{
return A + B + C;
}
}

关于c# - MVVM ViewModel 级联属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com