0

我目前正在使用以下解决方法在数据网格列上设置可见性属性:

这是在 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 

任何帮助将不胜感激。

4

1 回答 1

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)));
    }
}
于 2013-11-04T11:10:50.787 回答