2013-11-04 56 views
0

我目前周圍使用此設置工作在數據網格列visibility屬性:檢查,看是否有DataGrid的元數據已經改變

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

任何幫助將不勝感激。

+0

究竟在那裏幹什麼呢?如果您需要重寫依賴項屬性元數據,則應該創建派生的DataGrid並在派生類的靜態構造函數中調用OverrideMetadata。 – Clemens

+0

我不知道,很多關於如何使用數據網格列上的可見性屬性的互聯網文章,因爲它不存在於框架中,這是我來到的解決方案,它的作品,它只是不喜歡被稱爲如果它已經改變了。 – Chris

回答

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))); 
    } 
} 
相關問題