wpf 如何使用单选按钮和MVVM模式

icomxhvb  于 2022-12-14  发布在  其他
关注(0)|答案(5)|浏览(323)

我使用了PRISM(以及MVVM模式)。我有一个复杂的DateTime选择器视图,其中包含单选按钮。用户可以选择今天、昨天、日期、一年中的某个星期等。我使用单选按钮来进行不同的选择。
在MVVM中做这件事的最好方法是什么?我真的想不出一个干净的方法。我可以创建许多自定义行为添加到每个项目中来跟踪它们,但它似乎不可维护。
我将放置一些代码,但我真的不; I don“我不喜欢这样,对我来说,这违反了MVVM原则(将所有内容都放在XAML中)。
有谁有更好的主意吗?

2sbarzqh

2sbarzqh1#

保留RadioButtons,向VM添加一个枚举类型,该类型可以返回“Today”、“Yesterday”或“Tomorrow”等内容。在UI端创建一个ValueConverter,该转换器接受“Tomorrow”等参数,并将其与VM上的绑定值进行比较,然后返回IsChecked所需的bool?。

tp5buhyn

tp5buhyn2#

把它放在代码后面。
M-V-VM模式不是“把所有东西都放在xaml中”,而是“单独的关注点”。你的VM想要一个DateTime,对吗?在这种情况下,它不关心如何选择DateTime,它只需要一个DateTime。
将View逻辑放在ViewModel中不是一个好主意,因为您现在要向VM提供有关View工作方式的知识。该流程旨在使View了解ViewModel,而ViewModel了解Model。反之通常不成立。(与所有计算机相关的事情一样,总是存在例外)
希望这个有用。

twh00eeo

twh00eeo3#

ComboBox代替RadioButton,提供绑定到ViewModel的TimeOffset(自定义类)列表,以及相应的SelectedTimeOffest属性,怎么样?
如果您需要根据TimeOffset的类型显示额外信息,例如具有WeekCount属性的WeekOffsetTimeOfset的子类别),请建立一个内容控件,其中包含数个由TimeOFfset类型自订的DataTemplate
只是一个想法...

h79rfbju

h79rfbju4#

您可以创建一个枚举,将枚举的值绑定到列表框,使用silverlight重新模板化ListboxItems此帖子,但类似的操作应该可以工作http://leeontech.wordpress.com/2009/03/18/creating-radiobuttonlist/

o3imoua4

o3imoua45#

ViewModel旨在以视图可以使用的方式来表示模型。
在这种情况下,你可以为VM中的每个按钮设置一个布尔属性,当按钮更新时,它只会将所有其他属性设置为false。然后,在你的视图中,你可以将每个属性IsChecked绑定到ViewModel中的相应属性。
另外,请注意,WPF中的绑定单选按钮中目前存在bugHere's是一个潜在的解决方案。

相关问题