我应该在创建用户控件时尝试跟踪MVVM

时间:2011-07-30 15:41:59

标签: c# wpf mvvm user-controls

我在WPF中重新创建一个小应用程序,我试图在有意义的地方使用MVVM。我开始以为我会100%使用它,到目前为止,我已经得出结论,严格的MVVM(没有任何代码隐藏)不一定是积极的事情。

现在我正在尝试创建一个绑定到列表的用户控件,并为列表中的每个项创建一个常规按钮。 (基本上我正在重新创建一个列表框但是具有不同的风格。)我正在专门制作这个用户控件,以避免在主窗口的代码隐藏中动态创建按钮,但我在想,因为一切都基本上是“查看“,所有逻辑都将在其他地方完成,我可以在代码中添加按钮,而不会在技术上破坏MVVM。这种思路是否正确,存在严重缺陷或介于两者之间?谢谢你的帮助!

3 个答案:

答案 0 :(得分:6)

  

严格的MVVM(无任何代码隐藏)

MVVM并不禁止使用代码隐藏...有时代码隐藏 是正确的做某事的地方,只要它纯粹与UI相关。

但是,在这种情况下,我没有看到在代码隐藏中创建这些按钮的好处,当您可以使用ItemsControl轻松制作ItemTemplate时,会显示您的每个项目的按钮集合。

<ItemsControl ItemsSource="{Binding YourCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Text}" Command="{Binding DoSomethingCommand}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

答案 1 :(得分:3)

学习MVVM时,通常最好从保守派开始。盲目地说MVVM的一切都是把车推到马前。相反,做你喜欢做的事情。模式的目的是消除开发中的摩擦。当你看到模式可以解决的方式产生摩擦时,就是使用模式的时候了。一旦您看到使用MVVM的好处,您就会感觉何时可以预先应用它以及何时可以推迟做出决定。此外,到那时你会熟悉它,它实际上比其他路线更容易使用。

对于您的具体问题,解决方案已得到解答,您不需要代码或视图模型,因为WPF模板会为您处理。我建议在WPF中学习更多有关模板系统的知识,它非常强大,可以提供更优雅的解决方案。

答案 2 :(得分:2)

句子“我在想,因为一切都基本上是”视图“,并且所有逻辑都将在其他地方完成,我可以在代码中添加按钮,而不会在技术上破坏MVVM”,这是一种自相矛盾,由我。因为假设该按钮为UI,纯UIXAML而代码为modelmodelview,则将UI移至代码隐藏。我,peronally,会尽可能地在UI中进行XAML自定义。使用标准ListView / ListBox控件并对其进行自定义。这比在链中添加按钮更棘手,但肯定更多稳定,因为许多东西已经在现成的控件中被认为是你唯一想到的就是自定义外观项目,WPF的惊人力量来自哪里。

简而言之:在我看来,使用标准控件并自定义XAML内的项目外观

问候。