听取PropertyChanged事件的业务逻辑

问题描述 投票:1回答:2

我的问题可能是主观的,如果是的话,我很抱歉。

我们正在开发一个具有一些自动保存功能的UWP应用程序,这样每次用户更新某些内容时,整个对象都会保存到文件系统中。

为了做到这一点,我使用INotifyPropertyChanged接口来检测我的对象中的属性何时更改,或者如果需要,在子对象中检测PropertyChanged事件。当通过双向数据绑定出现更改时,我正在保存整个对象。类似的东西(代码可能包含拼写错误,不代表真实代码):

public class ObjectViewModel : ViewModelBase // from MVVM-Light
{
    public ObjectViewModel()
    {
        Section1 = new SectionViewModel();
        Section1.PropertyChanged += SectionOnPropertyChanged();
        Section2 = new SectionViewModel();
        Section2.PropertyChanged += SectionOnPropertyChanged();
    }

    public SectionViewModel Section1 { get; set; }

    public SectionViewModel Section2 { get; set; }

    private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        RaisePropertyChanged();
    }
}

public class SectionViewModel : ViewModelBase // from MVVM-Light
{
    private string _myString;
    public SectionViewModel()
    {
        Property1 = new SubPropertyViewModel();
        Property1.PropertyChanged += SubPropertyOnPropertyChanged();
        Property2 = new SubPropertyViewModel();
        Property2.PropertyChanged += SubPropertyOnPropertyChanged();
        MyString = "some value";
    }

    public string MyString
    {
        get => _myString;
        set => Set(ref _myString, value);
    }

    public SubPropertyViewModel Property1 { get; set; }

    public SubPropertyViewModel Property2 { get; set; }

    private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        RaisePropertyChanged();
    }
}

现在我可以听听我的PropertyChangedObjectViewModel事件来保存它。知道MyString属性是与TextBox双向绑定。而Property1&2是双向绑定到自定义UserControl(某种RadioButton)。

但我的同事告诉我,PropertyChanged事件被用于绑定,并且附加到他们做业务逻辑是不好的做法。他取消了对PropertyChanged的倾听,为UserControl添加了一个关于Tapped事件的监听器,并通过Message发送一些自定义Messenger。对于字符串也是如此,他在更改时发送自定义Message

我真的不是它修改的忠实粉丝。

PropertyChanged事件的业务逻辑是不好的做法?

c# mvvm uwp mvvm-light
2个回答
0
投票

PropertyChanged并点击了所有回调,没有一个是好的或坏的做法,所以它完全取决于你如何构建你的应用程序,如果你已经使用PropertyChanged,然后继续使用它没有任何伤害。另一方面,tapped事件也同样有效,所以要回答你的具体情况:

“不!PropertyChanged对于业务逻辑来说并不是一种糟糕的做法。


0
投票

在我看来,如果你熟悉MVVM,你应该使用ViewModel中定义的命令来响应用户操作,并在Model层中描述你的业务逻辑。在绑定和“PropertyChangedEvent”中使用的属性不应包含任何业务逻辑,因为它可能会在将来减慢您的开发过程,通过变成“意大利面条代码”,因为您将添加更多功能,并且您将很难调查属性之间的依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.