1

在我的场景中,我有很多视图(用户控件),其中包含一些过滤器选项。例如,假设总共有 10 个过滤器选项,但并非所有视图都显示所有 10 个过滤器选项。有些只显示 3 个,有些只显示 8 个,等等。重要的是,当在一个视图上设置一个过滤器选项时,包含此过滤器选项的所有视图都应该具有相同的值。

AView: filterOption1, FilterOption2, FilterOption3
BView: filterOption1, FilterOption3, FilterOption5
CView: filterOption2, FilterOption4, FilterOption6, FilterOption7

当用户在 AView 上设置 filterOption1 = True 时,应在所有使用 filterOption1(例如 BView)的视图上设置相同的值。这使我决定拥有一个 CommonViewModel(单例),它将包含公共(共享)数据,并且将公开其中的所有过滤器选项,并且所有视图都应绑定到此 CommonViewModel。

为了显示特定视图的过滤器选项,我可以想到两种方法:

1) 设计一个 CommonView,为每个表示创建新实例,并在不需要的地方隐藏过滤器选项

<DataTemplate DataType="vm:CommonViewModel">
  <vw:CommonView ShowFilterOption1="True" ShowFilterOption3="True" />
</DataTemplate>

2)为每个不同的表示设计单独的视图(不同的过滤器选项)

您如何看待这些方法,您更喜欢哪一种,您是否还有其他想法,以及遵循正确的 MVVM 设计的最佳选择是什么?

4

2 回答 2

1

绑定到一个视图模型的 n 个视图,一旦视图模型中的属性发生更改,视图应该更新 = 双向绑定到该属性

1) 一个包含所有过滤器选项的视图意味着您需要自定义逻辑来仅显示您希望看到的过滤器选项。= 绑定到可见性

2)过滤器选项的每个不同表示的单独视图也是可能的,但我只会这样做,前提是每个单独的视图都包含一些额外的控件或逻辑,这使得每个单独的视图在某种程度上是独一无二的,否则使用 1)。

于 2013-03-23T18:07:43.330 回答
0

对我来说,这种逻辑 - 是否将特定的 filterOption 包含到视图中,实际上属于视图模型,而不是视图。我会考虑实现一个视图,并为每个 A、B、C 单独的视图模型实例。视图模型可以是一个类,由它将显示的 filterOptions 参数化。

于 2013-03-24T01:34:04.180 回答