0

我有一个控件:DailyHours。那有一组我创建的自定义 TimeEdit 控件。每个控件都应该绑定到 DailyHours 视图模型类。相反,它会尝试在 TimeEdit 控件中找到我绑定到的值。

TimeEdit 控件绑定的示例:

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

TimeEdit 控件有自己的内部小时和分钟值,这些值绑定到 Hour 和 Minute 属性。由于这个原因,TimeEdit 控件的 DataContext 就是它本身。

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

但是,这会导致 DailyHours 控件错误地绑定时间值。它在 TimeEdit 控件而不是它自己的视图模型中查找 CurrentOperatingHours 属性。

如何让我的 TimeEdit 控件与内部值正确绑定,而不会干扰其父容器上的绑定?

4

2 回答 2

5

您可以采用两种方式:删除 this.Datacontext = this; 从您的用户控件中并使用 ElementName 的 Hour 和 Minute 绑定(好的做法!)或在 Mainview 中使用 relativeSourceBinding (不好的做法)。

我在这里回答了一个类似的问题。

ps:用户控件永远不应该将数据上下文设置为它自己。这破坏了数据上下文继承,它不是预期的行为。

于 2012-06-29T11:01:13.623 回答
0

试试这个

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

我希望这会奏效。

于 2012-06-29T11:00:09.230 回答