0

幾乎沒有與MVVM和用戶控件事件混淆。Silverlight用戶控件事件和MVVM

我在我看來有一個用戶控件。它有兩種模式,即Read和Edit。 (的TextMode)

<Grid 
     x:Name="LayoutRoot" 
     Background="Transparent"> 


       <controls:MyUserControl 
          Mode="{Binding Path=TextMode,Mode=TwoWay}" 
          Text="{Binding Path=ReportText,Mode=TwoWay}" 

       </controls:MyUserControl>   

</Grid> 

當的TextMode更改爲「編輯」,我想一個「保存」按鈕添加到手機應用程序任務欄,並點擊保存按鈕時要保存與用戶控件中的文本。另外我想在'閱讀'視圖中禁用保存按鈕。 (ie.When TextMode是'閱讀')

什麼是正確的MVVM方式做到這一點?我想到了兩種方法:

1)我想在用戶控件上公開ModeChanged屬性並將它傳播到視圖,然後添加保存按鈕。 (但這是否違背MVVM的方式,即將代碼放在後面?)。

2)從用戶控件處理依賴屬性本身的屬性changed,並添加保存按鈕。 (似乎不正確,因爲應用程序邏輯混合在usercontrol中)

我如何在此視圖模型中涉及?

什麼是做MVVM後的這種操作的好方法。

回答

1

ApplicationBar不是一個DependencyObject,因此不能被數據綁定。因此,在這方面,關於MVVM的具體細節沒有任何意義。

MVVM的目的是將您的業務邏輯與用戶界面分開。因此MVVM不是在宗教上避免代碼隱藏。實際上,其中一個危險是試圖將視圖模型承擔過多的責任,因爲擔心使用代碼。

要考慮的最後一件事是,如果您選擇這樣做,打破全能的MVVM模式只有在別人必須弄清楚您所做的事情時纔會成爲問題。大多數開發團隊在耗盡所有其他可能性(並浪費了半小時或更長時間)之後會在代碼隱藏方面尋找代碼。但是,在ApplicationBar的情況下,沒有其他地方可以。

簡而言之,您的第一個選項沒有任何問題。