我使用了PRISM(以及MVVM模式)。我有一个复杂的DateTime选择器视图,其中包含单选按钮。用户可以选择今天、昨天、日期、一年中的某个星期等。我使用单选按钮来进行不同的选择。在MVVM中做这件事的最好方法是什么?我真的想不出一个干净的方法。我可以创建许多自定义行为添加到每个项目中来跟踪它们,但它似乎不可维护。我将放置一些代码,但我真的不; I don“我不喜欢这样,对我来说,这违反了MVVM原则(将所有内容都放在XAML中)。有谁有更好的主意吗?
2sbarzqh1#
保留RadioButtons,向VM添加一个枚举类型,该类型可以返回“Today”、“Yesterday”或“Tomorrow”等内容。在UI端创建一个ValueConverter,该转换器接受“Tomorrow”等参数,并将其与VM上的绑定值进行比较,然后返回IsChecked所需的bool?。
tp5buhyn2#
把它放在代码后面。M-V-VM模式不是“把所有东西都放在xaml中”,而是“单独的关注点”。你的VM想要一个DateTime,对吗?在这种情况下,它不关心如何选择DateTime,它只需要一个DateTime。将View逻辑放在ViewModel中不是一个好主意,因为您现在要向VM提供有关View工作方式的知识。该流程旨在使View了解ViewModel,而ViewModel了解Model。反之通常不成立。(与所有计算机相关的事情一样,总是存在例外)希望这个有用。
twh00eeo3#
用ComboBox代替RadioButton,提供绑定到ViewModel的TimeOffset(自定义类)列表,以及相应的SelectedTimeOffest属性,怎么样?如果您需要根据TimeOffset的类型显示额外信息,例如具有WeekCount属性的WeekOffset(TimeOfset的子类别),请建立一个内容控件,其中包含数个由TimeOFfset类型自订的DataTemplate。只是一个想法...
ComboBox
RadioButton
TimeOffset
SelectedTimeOffest
WeekCount
WeekOffset
TimeOfset
TimeOFfset
DataTemplate
h79rfbju4#
您可以创建一个枚举,将枚举的值绑定到列表框,使用silverlight重新模板化ListboxItems此帖子,但类似的操作应该可以工作http://leeontech.wordpress.com/2009/03/18/creating-radiobuttonlist/
o3imoua45#
ViewModel旨在以视图可以使用的方式来表示模型。在这种情况下,你可以为VM中的每个按钮设置一个布尔属性,当按钮更新时,它只会将所有其他属性设置为false。然后,在你的视图中,你可以将每个属性IsChecked绑定到ViewModel中的相应属性。另外,请注意,WPF中的绑定单选按钮中目前存在bug。Here's是一个潜在的解决方案。
5条答案
按热度按时间2sbarzqh1#
保留RadioButtons,向VM添加一个枚举类型,该类型可以返回“Today”、“Yesterday”或“Tomorrow”等内容。在UI端创建一个ValueConverter,该转换器接受“Tomorrow”等参数,并将其与VM上的绑定值进行比较,然后返回IsChecked所需的bool?。
tp5buhyn2#
把它放在代码后面。
M-V-VM模式不是“把所有东西都放在xaml中”,而是“单独的关注点”。你的VM想要一个DateTime,对吗?在这种情况下,它不关心如何选择DateTime,它只需要一个DateTime。
将View逻辑放在ViewModel中不是一个好主意,因为您现在要向VM提供有关View工作方式的知识。该流程旨在使View了解ViewModel,而ViewModel了解Model。反之通常不成立。(与所有计算机相关的事情一样,总是存在例外)
希望这个有用。
twh00eeo3#
用
ComboBox
代替RadioButton
,提供绑定到ViewModel的TimeOffset
(自定义类)列表,以及相应的SelectedTimeOffest
属性,怎么样?如果您需要根据
TimeOffset
的类型显示额外信息,例如具有WeekCount
属性的WeekOffset
(TimeOfset
的子类别),请建立一个内容控件,其中包含数个由TimeOFfset
类型自订的DataTemplate
。只是一个想法...
h79rfbju4#
您可以创建一个枚举,将枚举的值绑定到列表框,使用silverlight重新模板化ListboxItems此帖子,但类似的操作应该可以工作http://leeontech.wordpress.com/2009/03/18/creating-radiobuttonlist/
o3imoua45#
ViewModel旨在以视图可以使用的方式来表示模型。
在这种情况下,你可以为VM中的每个按钮设置一个布尔属性,当按钮更新时,它只会将所有其他属性设置为false。然后,在你的视图中,你可以将每个属性IsChecked绑定到ViewModel中的相应属性。
另外,请注意,WPF中的绑定单选按钮中目前存在bug。Here's是一个潜在的解决方案。