关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
3年前关闭。
Improve this question
“应该” View 逻辑通常驻留在哪里?在 View 中(包括后面的代码)还是在 View 模型中?
按照逻辑,我了解用于修改 View (使其动态),更改其元素属性的任何内容:Visibility
, IsEnabled
, Content
等基于某些条件。
我在选择正确的陈述之间挣扎:
View 中的逻辑。
一个例子,显示一些文本:
<Grid Visibility="{Binding TextAvailable, Converter=...}">
<TextBlock Text="{Binding Text}" Visibility="{Binding TextOk, Converter=...}" />
</Grid>
通过查看此 xaml,您知道 viewmodel 中有 2 个属性:
TextAvailable
和 TextOk
, 用于有条件地显示 Text
.同样可以使用数据触发器来实现。方式无关,重点是:逻辑在 View 中 .一个人必须彻底了解两者:逻辑和。实现 .
View 模型中的逻辑。
Xaml 更简单:
<TextBlock Text="{Binding Text}" Visibility="{Binding ShowText, Converter=...}" />
和 逻辑在 View 模型中 :
public bool ShowText => TextAvailable && TextOk;
但这需要通知支持,通常订阅/取消订阅事件(如果确定性取消订阅很复杂,则使用弱事件),以便能够告诉 View
OnPropertyChanged(nameof(ShowText))
如果任何相关属性(property)发生变化。因此实现 在许多方法/属性中很好地传播。我个人更喜欢简单的 View 模型和相当复杂的 View (xaml),充满逻辑。最近我found a way使逻辑看起来真的很酷(没有额外的元素,更容易看到)。
我了解这两种方法都可以使用什么,因此问题是相当基于意见的,但我不想在我的软件中以疯狂的比例混合这两种方法。哪种方式更干净,更容易被其他 MVVM 程序员接受?我应该更喜欢什么,为什么?
最佳答案
我认为答案是做任何你觉得舒服的事情。我不相信一种方法在客观上比另一种更好。
我猜在纯 MVVM 场景中,ViewModel 不知道它的 View ,也不知道它的数据将如何显示。在实践中,我认为这种情况很少遇到。大多数情况下,在编写 ViewModel 代码时,您会很好地了解其数据将如何显示和交互:换句话说,您将知道 View 将是什么样子,以及它将如何表现.
鉴于此,我认为在 ViewModel 中放置一些 UI 逻辑不是问题。我的意思不是直接操作 View 中的 UI 元素。相反,在 ViewModel 上具有 View 将绑定(bind)到的属性,例如示例中的 Boolean 属性。逻辑越复杂,我就越有可能将它放在 ViewModel 中,因为尽管您可以通过可见性转换器和数据触发器在 View 中执行逻辑,但 XAML 可能会变得非常冗长。这并不是说我从不使用这些 XAML 功能,只是我通常会将它们用于更简单的逻辑。
归根结底,ViewModel 是为了支持 View:本质上是为它提供 View 的 UI 元素可以绑定(bind)的属性,从而提供两者可以通信的管道。您的选择,基于您要实现的 MVVM 的纯度,是您希望 ViewModel 支持多少 View,以及您希望 View 隔离多少。
关于c# - MVVM - 查看逻辑 : view vs viewmodel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48925516/