2011-12-20 57 views
0

我对ComboBox控件有一个相当有趣的例子 - CustomComboBox;Silverlight中的TemplateBinding DataContext CustomControl

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

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

的想法:

  • 使用此控件多次在一个页面上
  • 在母版容器使用它
  • 母版控制需要有关于页它不同DataContexts是

逻辑:

  • 在被覆盖的OnApplyTemplate我得到电网和连接几个事件处理器

问题:

  • 母版控制触发OnApplyTemplate只有一次
  • 的CustomComboBox的第一次亮相是如预期。 然而,每一个后续apearance是相同的DataContext,改变CustomComboBox 的DataContext的,即使这些变化没有达到改变我CustomGrid的DataContext

我相信,在绑定或呈现逻辑是什么坏... 请扔一些想法,当ControlTemplate被应用到覆盖方法(无论其母公司,也没有子女)控制我将在这里体会到一丝

感谢

+0

为了帮助您使用多个组合框,请提供有关标记的更多详细信息。主页,页面和组合框如何关联?你发布了哪个控件的模板部分?你访问网格的代码是什么? – 2011-12-21 15:55:41

回答

1

OnApplyTemplate被调用。如果输入OnApplyTemplate一次,则重写控件也必须创建一次。我的意思是你只需要一个单一的masterpage实例。这不应该是意外的。

说到Popup s和DataContext,经常会遇到从Popup到其外部的绑定问题。所以,我宁愿写一些代码隐藏,以提供正确的上下文,而不是依靠Binding s。在SL5之前,确实存在DataContextChanged事件缺失的问题。要解决此问题,您应该在CustomComboBox上定义自定义DependencyProperty,将其绑定到CustomComboBox的上下文,并将其值分配给中的PropertyChangedCallback

相关问题