在WPF中覆盖DataContext

时间:2011-12-07 06:51:24

标签: wpf wpfdatagrid

我想创建一个仅适用于特定类型DataContext的UserControl。 为此我正在做这样的事情:

  public new AutoSuggestViewModel DataContext 
             { get { return (AutoSuggestViewModel)base.DataContext; } 
               set { base.DataContext = value; } }

遗憾的是,这会破坏.Net的反射并导致控件在Visual Studio的设计视图中出错,甚至更糟糕的是当我将控件用作DataGridTemplateColumn的编辑模板的一部分时会导致错误并且无法正常工作,再次由于破坏反射。它在AmbiguousMatchException

上显示为datagrid.BeginEdit()

是否有人知道围绕此问题的工作以及如何实现这一目标。 是的,我曾想过使用像MyDataContext这样的其他属性来返回强制转换DataContext,但如果可能的话,我正在寻找更优雅的东西。

2 个答案:

答案 0 :(得分:2)

更优雅的是不要强加于DataContext。事实上,对我来说,为什么你想这样做没有任何意义。为什么不直接定义一个单独的依赖属性的正确类型?然后,您的控件的使用者可以通过绑定到其数据上下文或使用任何其他标准WPF惯用语来为其分配。

答案 1 :(得分:0)

还有其他方法可以确保分配正确类型的对象,例如,您可以在覆盖元数据中创建属性更改回调,检查新值的类型,如果您“不喜欢它,则抛出异常”