C# 来自Windows窗体的WPF最佳实践

C# 来自Windows窗体的WPF最佳实践,c#,wpf,xaml,C#,Wpf,Xaml,我有丰富的WinForms经验,但对WPF还是新手。通过XAML实现表单设计愿景很容易深入研究,但我仍然不清楚m-V-VM编程风格会带来什么。我理解区分事物的外观和行为的原则,但在某些情况下,理智地这样做仍然让我难以理解 例如,如果我有一个带有9个按钮的小键盘,并且我想要一种通过IsEnable属性启用/禁用所有按钮的方法,那么我的表单设计器希望通过一个代码隐藏方法来处理所有这些按钮,该方法通过设计名称将它们作为目标。这种操作的WPF等价物是什么?我是否需要在codebehind中管理一系列bo

我有丰富的WinForms经验,但对WPF还是新手。通过XAML实现表单设计愿景很容易深入研究,但我仍然不清楚m-V-VM编程风格会带来什么。我理解区分事物的外观和行为的原则,但在某些情况下,理智地这样做仍然让我难以理解


例如,如果我有一个带有9个按钮的小键盘,并且我想要一种通过IsEnable属性启用/禁用所有按钮的方法,那么我的表单设计器希望通过一个代码隐藏方法来处理所有这些按钮,该方法通过设计名称将它们作为目标。这种操作的WPF等价物是什么?我是否需要在codebehind中管理一系列bool,并将XAML中的每个bool绑定到各个按钮属性?谢谢你的指导。如果对这一场景进行了解释,应该足以为我指明正确的方向。理想情况下,您将拥有一个可观察的按钮信息集合,该集合具有IsEnabled属性、图标和文本-将集合绑定到任何合适的控件,如itemsControl、list、,或者网格并将你的按钮信息关联到一个datatemple…你明白我的意思吗?没有gui,没有gui,只有viewmodel和绑定


或者像

那样,使用绑定可以轻松解决特定问题。您可以将按钮
IsEnabled
属性绑定到
ViewModel
中的公共属性,并根据
ViewModel
中包含的逻辑,当该属性值更改时,键盘按钮将被启用或禁用

正如@GCamel所提到的,您还可以拥有一个表示按钮的POCO类,该类将实现
INotifyPropertyChanged
接口,其中一个属性是IsEnabled属性。您可以将此类的实例添加到
ObservableCollection
中,当IsEnabled属性更改时,您的按钮将在UI中启用或禁用


我还强烈建议使用一种MVVM框架,我个人最喜欢的是Tony Sneed,他还写了一篇关于@cwap

提到的对话框问题的文章。在您的一个案例中:这是MVVM真正擅长的事情之一:您想创建一个类“Window1ViewModel”并将按钮的父容器添加到您自己创建的ViewModel的IsEnabled属性。然而,MVVM有一些非琐碎的问题(imho)并没有一个强大的解决方案——其中之一就是对话框。我的建议是禁用设计器并使用纯XAML,就像在WYSIWYG编辑器中不使用html一样。一旦你掌握了一些东西,你可能想重新启用设计器。感谢所有的链接!