我的主WPF窗口上的Uniform网格中有18个按钮。我需要在程序加载和运行期间修改Button的所有属性和命令。换句话说,当程序首次启动时,会选择影响布局的配置。之后可能会根据程序的运作方式进一步改变。我正在尝试整合ViewModel中的所有逻辑。所以简单的问题是 - 如何最好地实现这个设计?
一些想法:
可以使用传统绑定。这可行,除了你最终可能有100个。此外,每个属性中都有丑陋的逻辑 - 即如果config1然后背景为红色,否则如果是config2或3则背景为蓝色。
可以使用ValueConverters和CommandParameters限制绑定的数量,但是你的属性逻辑更加混乱。
可以绑定到Button的样式。这有助于简化属性设置,但最终会出现一堆混乱的样式。加载程序后也不能正常工作(我不认为你可以在应用后更改样式)。
每个配置可以有不同的Uniform网格(每个都有一组18个按钮),然后只显示所选的一个。这简化了属性逻辑,但混淆了XAML。
可以将Button对象本身传递给ViewModel。不知道如何实现这个加上我认为它打破了MVVM模式。如果我知道怎么做,可能是最简单的。
我为一个优雅的解决方案而感到茫然。我确信有一些简单的东西我不见了。任何想法都表示赞赏。感谢。
答案 0 :(得分:0)
以下是我在这种情况下所做的事情:
由于你想在每个按钮上绑定几个属性,包括一个命令,我会为每个按钮创建一个单独的小型ViewModel(MyButtonViewModel
),其中包括属性和命令。
然后,在主ViewModel中,我将创建一个按钮视图模型的集合(ObservableCollection<MyButtonViewModel>
),并使用一些简单的循环(或LINQ)代码填充它。
然后,在视图中,我会声明ItemsControl
使用ItemPanel
的{{1}}。然后,对于UniformGrid
,我将定义按钮以绑定到ItemTemplate
中的属性。
简单,小巧,优雅的IMO。
如果您需要任何澄清,请告诉我, 乙