1. 我會說這取決於那種用戶控件的,如果是「GE neric「,你應該可以改變DataContext,因爲控件在內部不應該與DataContext有任何關係。例如,如果我創建了一個ImageButton
用戶控件,它公開了屬性Caption
和ImageSource
,那麼應該在內部獨立於DataContext綁定這些屬性,實例上可以綁定那些數據上下文,並且也可以更改DataContext。
<uc:ImageButton Caption="{Binding ButtonInfo.Caption}"
ImageSource="{Binding ButtonInfo.Image}"/>
在這裏,人們可以再改變的DataContext簡化綁定了一下:
<uc:ImageButton DataContext="{Binding ButtonInfo}"
Caption="{Binding Caption}"
ImageSource="{Binding Image}"/>
如果另一方面,用戶控件是一個視圖模型視圖我期望的用戶控件綁定到視圖模型內部相對於DataContext的屬性。
在一個DataTemplate在當前的DataContext已經是這一觀點沒有任何一個簡單的實例應該做的視圖模型
所以,即
<v:StatisticsView />
如果要通過視圖模型是在當前的DataContext的屬性,你可以綁定的DataContext還有:
<v:StatisticsView DataContext="{Binding StatisticsViewModel}"/>
2. 這可以處理任何一種方式我要說的,特別是如果你哈只有三個屬性並沒有太多的麻煩來創建這些屬性。您可能需要考慮一些方面,如依賴性,例如將一個對象中的所有三個propeties分組是否合理?
3. 如圖1指出的,這應該是從該用戶控件本身顯而易見的,如果它是一個StatisticsView
消費者應(通過繼承當前的DataContext或通過顯式綁定它或者隱含地)在StatisticsViewModel
通過。
你的用戶控件做什麼?行爲是否依賴於虛擬機內的某些屬性?消費者通常可以自由設置/綁定他們認爲合適的任何屬性。大多數可以調整用戶控件行爲的東西都暴露爲屬性(DP)。 – Gishu 2010-06-02 11:51:27
控制接收原始數據並對其進行消毒。 它還將拋光數據作爲在UI上可見的屬性進行公開。虛擬機包含將原始數據轉換爲拋光數據的邏輯。 – 2010-06-03 06:09:18
聽起來不像UserControl行爲。聽起來更像是一個處理/翻譯/轉換器類,它接受一個數據結構並輸出另一個數據結構。然後你可以通過普通的WPF數據綁定將這個新的結構綁定到UI。 – Gishu 2010-06-04 05:49:47