根据其他属性更新对象 属性
Update an object Property based on other properties
我正在尝试根据其他 2 个属性的值更新 属性。
我这里用的是INotifyPropertyChanged
。
所以基本上我有 3 个属性 A
、B
和 C
。我这里更新的 属性 是 C
基于 A
和 B
。我能够从 A
和 B
更新 C
的 属性 值。所以 属性 C
将是 属性 A
和 B
(C = A + 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));
}
更新
对于上面的混淆很抱歉,基本上我试图在 属性 A
和 B
被传递时更新 属性 C
的值.所以 属性 C
将是 属性 A
和 B
(C = A + B) 的加法。希望这消除了困惑?
鉴于上述说明,您要做的是:
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));
}
我正在尝试根据其他 2 个属性的值更新 属性。
我这里用的是INotifyPropertyChanged
。
所以基本上我有 3 个属性 A
、B
和 C
。我这里更新的 属性 是 C
基于 A
和 B
。我能够从 A
和 B
更新 C
的 属性 值。所以 属性 C
将是 属性 A
和 B
(C = A + 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));
}
更新
对于上面的混淆很抱歉,基本上我试图在 属性 A
和 B
被传递时更新 属性 C
的值.所以 属性 C
将是 属性 A
和 B
(C = A + B) 的加法。希望这消除了困惑?
鉴于上述说明,您要做的是:
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));
}