2009-07-28 41 views
1

我正在使用PRISM(以及MVVM模式)。我有一个复杂的DateTime选择器视图与单选按钮。 用户可以选择今天,昨天,日期,一年中的一周等。我使用单选按钮来选择不同的选项。Howto RadioButtons和MVVM模式

在MVVM中这样做的最好方法是什么? 我真的无法想象一个干净的方式。我可以创建很多自定义行为来添加到每个项目来跟踪它们,但它似乎不可维护。我打算把一些代码隐藏,但我真的不喜欢那样,对我来说,它打破了MVVM的原则(把所有内容都放在XAML中)。

有没有人有更好的想法如何去?

回答

0

怎么样ComboBox代替RadioButton年提出TimeOffset(定制类)的列表绑定到您的视图模型,相应SelectedTimeOffest属性。
如果您需要根据TimeOffset的类型显示额外信息,例如具有WeekCount属性的WeekOffsetTimeOfset的子类),具有根据TimeOFfset的类型定制的若干DataTemplate的内容控制。

只是一个想法...

0

视图模型的设计呈现模型在某种程度上视图可以消耗。

在这种情况下,您可以为虚拟机中的每个按钮设置一个布尔属性,并且当按钮更新时,只需将所有其他属性设置为false。然后在View中,您可以将每个属性IsChecked绑定到ViewModel中的相应属性。

另外,请注意,目前有一个bug绑定WPF中的单选按钮。 Here's一个潜在的解决方案。

+0

哇,我贴这个bug很久以前,我没有意识到它受到如此多的关注;)请注意,它固定在.NET 4中。 – 2009-07-28 14:15:35

2

保留RadioButtons,为您的虚拟机添加一个枚举类型,可以返回诸如“今日”,“昨天”或“明天”之类的内容。在UI端创建一个ValueConverter,它接受像“Tomorrow”这样的参数并将其与VM上的绑定值进行比较,然后返回bool? IsChecked所需要的。

1

把它放在代码后面。

M-V-VM模式不是“把所有东西都放进xaml”这是“单独的担忧”。你的VM想要一个DateTime吗?在这种情况下,它并不关心如何选择DateTime,它只需要一个DateTime。

将视图逻辑放入ViewModel并不是一个好主意,因为您现在向虚拟机提供有关View的工作原理的知识。这个流程是为了了解关于模型的ViewModel。反过来通常不正确。 (与所有与电脑相关的东西总是有例外)

希望这有助于。