检查数据网格的元数据是否已更改

时间:2013-11-04 10:33:10

标签: c# wpf xaml datagrid metadata

我目前正在使用此解决方法在数据网格列上设置visibility属性:

这是在xaml.cs

DataGrid.DataContextProperty.OverrideMetadata(typeof(DataGrid),
    new FrameworkPropertyMetadata (null, 
        FrameworkPropertyMetadataOptions.Inherits,
        new PropertyChangedCallback(OnDataContextChanged)));

但是我需要检查以确保它尚未更改,否则会引发异常。我尝试过的一个例子如下。

if (DataGrid.DataContextProperty.GetMetadata(typeof(DataGrid)) == 
    DataGrid.DataContextProperty.DefaultMetadata) // didn't work 

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我会说覆盖现有类型的属性元数据(一个未由代码声明但属于WPF框架的类)是非法的。

调用DataContextProperty.OverrideMetadata(typeof(DataGrid), ...)只是偶然的,因为类DataGrid尚未覆盖FrameworkElement.DataContext属性的元数据。但你不能对此作出任何假设,MS可能会决定在未来的WPF版本中对此进行更改。

您必须在静态类构造函数中创建派生类并覆盖元数据,如OverrideMetadata的MSDN文档中所示:

class MyDataGrid : DataGrid
{
    static MyDataGrid()
    {
        DataGrid.DataContextProperty.OverrideMetadata(typeof(MyDataGrid),
            new FrameworkPropertyMetadata(null, 
                FrameworkPropertyMetadataOptions.Inherits,
                new PropertyChangedCallback(OnDataContextChanged)));
    }
}