C# 检查datagrid';的元数据已更改
我目前正在使用以下解决方法设置数据网格列的可见性属性: 这在xaml.cs中 但是,我需要检查以确保它尚未更改,否则它将抛出异常。下面是我尝试过的一个例子C# 检查datagrid';的元数据已更改,c#,wpf,xaml,datagrid,metadata,C#,Wpf,Xaml,Datagrid,Metadata,我目前正在使用以下解决方法设置数据网格列的可见性属性: 这在xaml.cs中 但是,我需要检查以确保它尚未更改,否则它将抛出异常。下面是我尝试过的一个例子 if (DataGrid.DataContextProperty.GetMetadata(typeof(DataGrid)) == DataGrid.DataContextProperty.DefaultMetadata) // didn't work 任何帮助都将不胜感激。我认为重写现有类型(一个未由代码声明但属于WPF框架的
if (DataGrid.DataContextProperty.GetMetadata(typeof(DataGrid)) ==
DataGrid.DataContextProperty.DefaultMetadata) // didn't work
任何帮助都将不胜感激。我认为重写现有类型(一个未由代码声明但属于WPF框架的类)的属性元数据是非法的 调用
DataContextProperty.OverrideMetadata(typeof(DataGrid),…)
只是偶然的,因为类DataGrid尚未重写FrameworkElement.DataContext
属性的元数据。但你不能对此做出任何假设,微软可能会决定在未来的WPF版本中改变这一点
您必须在静态类构造函数中创建派生类并重写元数据,如MSDN文档中所示:
你到底在那里干什么?如果需要重写依赖项属性元数据,则应创建一个派生DataGrid,并在派生类的静态构造函数中调用OverrideMetadata。我不确定,很多internet文章都介绍了如何在数据网格列上使用可见性属性,因为它在框架中不存在,而这正是我想到的解决方案,它可以工作,只是不喜欢被调用,如果它已经被改变了。
if (DataGrid.DataContextProperty.GetMetadata(typeof(DataGrid)) ==
DataGrid.DataContextProperty.DefaultMetadata) // didn't work
class MyDataGrid : DataGrid
{
static MyDataGrid()
{
DataGrid.DataContextProperty.OverrideMetadata(typeof(MyDataGrid),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.Inherits,
new PropertyChangedCallback(OnDataContextChanged)));
}
}