2009-07-28 42 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。反過來通常不正確。 (與所有與電腦相關的東西總是有例外)

希望這有助於。