2012-06-29 70 views
0

我有一個控件: DailyHours。那裏有我創建的自定義TimeEdit控件的集合。每個控件應該綁定到DailyHours視圖模型類。相反,它會嘗試在TimeEdit控件中查找我綁定的值。WPF MVVM控件錯誤地共享ViewModel

一個TimeEdit對照結合的一個例子:

<bc:TimeEdit Time="{Binding CurrentOperatingHours.MondayClose}" ></bc:TimeEdit> 

的TimeEdit控制具有用於小時和分鐘被綁定到小時和分鐘屬性其自身的內部值。出於這個原因,TimeEdit控件的DataContext本身就是。

public TimeEdit() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 
} 

但是,這會導致DailyHours控件錯誤地綁定時間值。它在TimeEdit控件中查找CurrentOperatingHours屬性,而不是其自己的視圖模型。

如何讓我的TimeEdit控件與內部值正確綁定,而不會干擾其父容器上的綁定?

回答

5

你可以去兩種方式:remove this.Datacontext = this;從你的用戶控件,並使用ElementName的小時和分鐘綁定(好習慣!)或在你的Mainview中使用relativeSourceBinding(壞習慣)。

我回答了類似問題here

ps:一個用戶控件不應該將datacontext設置爲self。這會中斷數據上下文繼承,而不是預期的行爲。

0

試試這個

Time="{Binding DataContext.CurrentOperatingHours.MondayClose, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"> 

我希望這會工作。

+0

當您添加的DataContext的路徑這會工作:{結合DataContext.CurrentOperatingHours.MondayClose ... – blindmeis

+0

其實控制在DataContext被綁定到控件本身,所以要找到在視圖模型屬性CurrentOperatingHours你需要使用RelativeResource 。 – ethicallogics

+1

您的示例綁定到窗口不是用戶控件,如果您嘗試您的代碼,您將看到像這樣的事情Binding.Error屬性CurrentOperatingHours找不到對象typeof窗口 – blindmeis