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 に答える