2012-02-19 97 views
1

我有一個viewModel用於綁定到用戶控件。用戶控件基本上是一個AdRotator。 AdRotator的一個特點是它可以在同一屏幕上的多個位置使用。分開的一組廣告將顯示在這些多個adRotators上。單視圖模型公開了4個可觀察的集合,這些集合是針對各個位置上的adRotator進行處理的。我的問題是,由於用戶控件是'拖ñ下降'使用我是一個鑑定方法,可以讓我確定哪些observablecollection(的4)應該一個adRotator綁定到。請讓我知道這是什麼方法。數據綁定到UserControl

如果我檢索用戶控件的名稱並根據名稱綁定集合,這會是一個好方法嗎?

回答

0

我不知道您的視圖模型的具體情況,所以我將提供一種可能的方法來表達一般條款。

假設您有一個包含四個子視圖模型的視圖模型,這些模型都是具有用戶控件中的綁定所查找的屬性的變體,並且名稱爲Vm1,Vm2等,在您的案例中,這些屬性可能是您的廣告集合。您可以將每個用戶控件實例的DataContext綁定到每個子視圖模型。

<my:SampleUserControl DataContext="{Binding Path=Vm1}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm2}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm3}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm4}" /> 

這樣,用戶控件的每個實例都可以綁定到並顯示不同的數據。

0

ViewModels適用於邏輯您的應用程序的一部分。對於可重用的控件,我會創建一個帶有後面代碼的常規UserControl。此控件可以通過屬性和事件公開API,並且在您的情況下會公開一個將獲得「廣告」列表的依賴屬性。

這樣,您可以將它們全部放在視圖中,其中每個AdRotator控件綁定到不同的集合。這樣一來,邏輯就只能放在一個地方 - ViewModel,而可重用的用戶界面將處於專門的控制之中。

View + ViewModels用於邏輯分離(Single Responsibility Principle,SRP),其中可重用控件用於重用(或DRY:不重複自己)。識別您正在使用的控件類型非常重要。常規的可重用控件不應該包含ViewModel。