2012-06-29 104 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