我有一个具有两个属性的对象,比如A和B.我想将UI中的控件绑定到A B.我找到了两种方法,但是我都不高兴。第一种是向我的对象添加一个计算属性,比如C,它返回A B.它是只读的,因此我必须在A和B的setter中引发PropertyChanged(C)。
第二个是在我的代码中实现IMultiValueConverter并结合我的XAML中的MultiBinding。但这似乎很多工作,特别是如果我需要在我的UI中为许多控件执行此操作。
这两个中哪一个是更好的选择,还是有不同的最佳实践方式?
答案 0 :(得分:0)
嗯,在A& amp;中调用PropertyChanged(nameof(C))并没有错。 B属性提供了您的viewmodel相对较小且可读。
作为优先选择,如果计算出的属性具有“业务”含义,我会尝试将其保留在viewmodel中。
如果确实需要将所有viewmodel属性保持为“纯粹”,则可以执行以下操作:
class ABCViewModel : ViewModelBase
{
public ABCViewModel ( )
{
PropertyChanged += ( sender, e ) =>
{
if ( e.PropertyName == nameof ( A )
|| e.PropertyName == nameof ( B ) )
{
C = A + B;
}
};
}
public int A
{
get { return _a; }
set
{
_a = value;
OnPropertyChanged ( );
}
}
private int _a;
public int B
{
get { return _b; }
set
{
_b = value;
OnPropertyChanged ( );
}
}
private int _b;
public int C
{
get { return _c; }
private set
{
_c = value;
OnPropertyChanged ( );
}
}
private int _c;
}