2010-01-29 71 views
3

我工作的一個UserControl,它是由一個Chart面板,並且其一些操縱圖表數據即圖表對照(圖的變色,啓用或圖表上禁用的東西等)的另一區域。將兩個UserControl綁定到相同的DataContext或ViewModel?

我使用ViewModel來管理圖表及其數據,但一直在想,如果從圖表控制區域中創建一個單獨的用戶控件以防止我的xaml變大並分離出組件,那將會很不錯。

如果我這樣做雖然,因爲控件將需要處理來自ChartViewModel的數據,應該怎麼處理它?我可以將Chart控件的DataContext綁定到ChartDataContext,所以我只有一個ViewModel?我應該讓自己的圖表控件擁有自己的視圖模型,然後讓圖表面板和圖表控件viewmodel以某種方式進行交談?

或者只是忘了一個單獨的用戶控件,並將所有東西放到一個大的viewmodel/xaml控件中?

在這種情況下,人們會推薦什麼?

回答

3

你絕對可以有你的兩個UserControl小號綁定到同一ViewModel。您可以每個DataContext綁定到同一個對象實例,或者我想你可以有綁定到其他的DataContext一個控制的DataContext並將其綁定到ViewModel

如果您從視圖和視圖模型的工作實現開始,並且您覺得XAML變得笨拙,我會同意您應該將XAML分成多個視圖。沒有理由,這意味着你需要分離你的ViewModel實現,直到你感覺它變得不連貫,或者太大。現在分離它會增加複雜性,因爲你建議他們需要溝通。

你可能會考慮通過簡單地創建一個UserControl出來的圖表控制區域和嵌入您現有的內部控制的控制開始。然後,您不必修改任何使用圖表控件的屏幕。

+0

很酷,這絕對會爲我簡化一些事情。你能提供一個小例子或鏈接,告訴我如何將每個DataContext綁定到同一個對象實例,或者將一個控件的DataContext綁定到另一個控件的DataContext上?要麼應該工作,但我還沒有找到語法。謝謝! – Nicros 2010-01-29 17:21:36

+0

想通了,似乎工作還行。 在孩子UserControl: DataContext =「{Binding DataContext,RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type local:SpectraView}}}」 – Nicros 2010-01-29 22:36:58

+0

請注意相關的源數據綁定。在運行時可能會非常昂貴!爲什麼不通過它的名字直接綁定到其他元素? – 2010-02-02 00:14:56

相關問題