将CommandParameter与Command一起传递是否是良好的MVVM做法?

时间:2019-02-20 12:02:14

标签: wpf mvvm

让我们说我有代码示例:

<ListView 
   ItemsSource="{Binding ConstructCollection}"                 
   x:Name="MyListView">          
</ListView>

<Button Width="45" Height="25"
        Content="Save"
        Command="{Binding SaveCommand}"
        CommandParameter="{Binding ElementName=MyListView, Path=SelectedItems}"/>

这样,单击按钮时很容易在ListView中检索所有选定的对象,但这不违反MVVM原理吗? 我是否不应该使用IsSelectedProperty创建特定的对象,然后将ListView ItemsSource绑定到这些对象的集合,然后单击按钮就可以循环浏览此集合,以查看IsSelectedProperty在哪些项目上是正确的? 谢谢!

1 个答案:

答案 0 :(得分:0)

这取决于您询问的人,并且可能会有所不同。有人可能会说它不尊重MVVM,因为项目选择方面没有反映在您的视图模型中。

但是我认为可以归结为应用程序是否认为SelectedItems是影响应用程序行为的状态,而不是过渡状态,以帮助提交该操作的特定项目。

认为在MVVM中,您应该能够仅通过与VM进行交互来模拟视图上可能发生的所有可能的逻辑交互(想象您要针对跳过该视图的VM编写测试,并且VM应该准确地代表什么是视图状态)。

例如,如果您有一个计时器,如果用户在指定的时间内未选择任何内容,它将向用户显示提示,则您不能再假设项目选择可以跳过VM。