Silverlight CustomControl中的TemplateBinding DataContext

时间:2011-12-20 18:52:19

标签: silverlight custom-controls datacontext templatebinding

我对ComboBox控件有一个相当有趣的案例 - CustomComboBox;

在这个ComboBox的样式中,Popup包含一个请求DataContext的自定义控件;

<ctrl:CustomGrid DataContext="{TemplateBinding DataContext}" GridName="{Binding Preferences.CurrentGridName}"/>

这个想法:

  • 在一个页面上多次使用此控件
  • 在主页容器中使用它
  • 母版页控件需要具有与其所在页面不同的DataContexts

逻辑:

  • 在重写OnApplyTemplate中,我正在获取网格并连接几个事件处理程序

问题:

  • 母版页控件仅触发一次OnApplyTemplate
  • CustomComboBox的第一次出现是预期的。 但是,即使更改CustomComboBox的datacontext,每个下一个窗口都使用相同的DataContext 这些更改无法更改我的CustomGrid DataContext

我确信绑定或表示逻辑上的内容很糟糕...... 请提出一些想法,我将不胜感激这里的提示

由于

1 个答案:

答案 0 :(得分:1)

OnApplyTemplate应用于覆盖该方法的控件(既不是其父项也不是子项)时,将调用<{ControlTemplate。如果输入OnApplyTemplate一次,则还必须创建一次覆盖控件。我的意思是你只有一个单个母版页实例。这不应该是意料之外的。

在谈到PopupDataContext时,从Popup到其外部的绑定经常会出现问题。所以,我宁愿写一些代码隐藏来向Popup提供正确的上下文,而不是依赖于Binding。确定在SL5之前存在DataContextChanged事件缺失的问题。要解决此问题,您应该在DependencyProperty上定义自定义CustomComboBox,将其绑定到CustomComboBox的上下文,并将其值分配给{Popup中的PropertyChangedCallback 1}}。