我正在尝试根据其他2个属性的值来更新属性。
我在这里使用INotifyPropertyChanged
。
所以基本上我有3个属性A
,B
和C
。我要更新的属性是基于C
和A
的{{1}}。我可以从B
和C
更新A
的属性值。因此,属性B
将是属性C
和A
的加法(C = A + B)。当从B
或A
传递一个值时,它工作正常,但同时传递了两个属性的值时,它仅取自最后传递的属性值。我知道当传递每个属性的值时,我需要增加B
的值。但是实现这一目标的最佳方法是什么?
这是我的代码:
C
更新
对于上面的混乱,很抱歉,基本上我试图在传递属性private int? _a;
public int? A
{
get => _a;
set
{
_a = value;
OnPropertyChanged($"A");
C = _a;
}
}
private int? _b;
public int? B
{
get => _b;
set
{
_b = value;
OnPropertyChanged($"B");
C = _b;
}
}
private int? _c;
public int? C
{
get => _c;
set
{
_c = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
和C
时更新属性A
的值。因此,属性B
将是属性C
和A
的加法(C = A + B)。希望这能消除混乱吗?
答案 0 :(得分:2)
鉴于上述说明,您要做的是:
private int? _a;
public int? A
{
get => _a;
set
{
if (value.HasValue != _a.HasValue || value.GetValueOrDefault(0) != _a.GetValueOrDefault(0))
{
_a = value;
OnPropertyChanged();
OnPropertyChanged(nameof(C));
}
}
}
private int? _b;
public int? B
{
get => _b;
set
{
if (value.HasValue != _b.HasValue || value.GetValueOrDefault(0) != _b.GetValueOrDefault(0))
{
_a = value;
OnPropertyChanged();
OnPropertyChanged(nameof(C));
}
}
}
public int? C
{
get => A + B;
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}