从视图模型中的属性设置器触发计算是否不正确?

时间:2018-05-26 10:36:42

标签: wpf mvvm

假设我有一个视图模型,它在实现INotifyPropertyChanged的视图模型中具有价格和数量属性,这些属性绑定到文本框和绑定到文本块的总成本属性。当价格或数量更新时,应重新计算总成本。

我理解最好尽量减少在属性设置器和getter中完成的工作量。从属性的setter触发计算是不好的做法吗?如果这是不好的做法我该怎么做呢?我可以看到两种可能性。

  1. 订阅PropertyChanged事件并从那里触发计算。我觉得这个事件对于外部观察者来说比在视图模型本身中使用更多,并且无论如何任何事件都是从setter触发的,所以我不知道它与直接从setter触发处理有多大不同

  2. 从文本框(例如LostFocus)上的事件触发计算,通过直接从事件调用视图模型上的方法或通过将事件绑定到视图模型上的命令来绑定属性。在我看来,对于MVVM,我们的想法是尽可能避免使用控制事件。

1 个答案:

答案 0 :(得分:0)

我担心这可能主要基于意见的问题,无论如何我想分享我的想法。

在触发属性设置器中的计算时,我没有看到太多问题。你可能会这样做很重要。 IHMO在您的代码中到处复制to_representation并不好。

我更喜欢这样的东西:

<Video
          resizeMode={'contain'}
          style={{ height: 312 }}
          url={url}
          placeholder={"https://baconmockup.com/300/200/"}
          onProgress={e => this.progress(e)}
          ref={(ref) => { this.video = ref }}
        />

progress(e) {
    console.warn('Time' + parseInt(e.currentTime))
  }

通过这种方式,您只需使用私人设定器,而无需记住提升任何东西。这是我喜欢的方式,但如果您正在寻找更复杂的方法,您可以找到很多想法herehere

最后一件事 - 但并非最不重要 - 我不喜欢你建议的其他方式,我觉得它们太扭曲了。