绑定到多个属性:我应该使用IMultiValueConverter还是计算属性?

时间:2018-05-23 12:31:08

标签: wpf

我有一个具有两个属性的对象,比如A和B.我想将UI中的控件绑定到A B.我找到了两种方法,但是我都不高兴。第一种是向我的对象添加一个计算属性,比如C,它返回A B.它是只读的,因此我必须在A和B的setter中引发PropertyChanged(C)。

第二个是在我的代码中实现IMultiValueConverter并结合我的XAML中的MultiBinding。但这似乎很多工作,特别是如果我需要在我的UI中为许多控件执行此操作。

这两个中哪一个是更好的选择,还是有不同的最佳实践方式?

1 个答案:

答案 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;
}