我附属了
public static ObjectContext GetObjectContext(DataGrid obj)
{
return (ObjectContext)obj.GetValue(ObjectContextProperty);
}
public static void SetObjectContext(DataGrid obj, ObjectContext value)
{
obj.SetValue(ObjectContextProperty, value);
}
public static readonly DependencyProperty ObjectContextProperty =
DependencyProperty.RegisterAttached("ObjectContext", typeof(ObjectContext), typeof(FilterableGrid));
我还有ViewModel,它具有Context属性,设置为更正ObjectContext(使用调试器检查)。
这个XAML代码:
<DataGrid AutoGenerateColumns="False" Name="gridOrders"
local:FilterableGrid.ObjectContext="{Binding Context}" local:FilterableGrid.IsFilterableGrid="True">
本地是我的命名空间。
我在IsFilterableGrid chaged事件(atached行为)中使用此代码来检索Object Context:
ObjectContext context = FilterableGrid.GetObjectContext(sourceGrid);
并且上下文变量总是最终为null。虽然网格的DataContext不为null并且指向正确的对象(ViewModel)。
有什么想法吗?我似乎在这方面失去了理智......
编辑:我调查了一下,如果我绑定local:FilterableGrid.IsFilterableGrid="{Binding IsFilterable}"
,它就能完美运行。但local:FilterableGrid.ObjectContext="{Binding Context}"
只是没有!也许它与传递的值的类型有关(ObjectContext而不是字符串或者说bool,它们是原始类型?)?
答案 0 :(得分:0)
我终于解决了这个问题,甚至不确定是什么帮助 - 似乎它在.NET或VS中都是一个错误。
我做的是:向RegisterAttached调用添加了一些属性元数据,并添加了OnChanged委托。之后它才开始工作(正确绑定)。当我从RegisterAttached调用中删除属性元数据时,它继续工作。
所以我真的不知道它是什么,但现在它有效。