2017-10-12 34 views
-1

我想從後面的代碼的GridView設置樣式。由於這是ListView.View依賴項屬性,我想監視它何時更改。Monitor for ListView.View的變化

試圖增加依賴屬性更改回調從this answer

var handler = new DependencyPropertyChangedEventHandler(Handler); 
DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty, 
    typeof(ListView)).AddValueChanged(listView, handler); 

其中處理器是

void Handler(object sender, DependencyPropertyChangedEventArgs e) { ... } 

會導致編譯器錯誤:

Error CS1503 Argument 2: cannot convert from 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'

嘗試投放(EventHandler)handler仍保持編譯抱怨:

Error CS0030 Cannot convert type 'System.Windows.DependencyPropertyChangedEventHandler' to 'System.EventHandler'


如果我嘗試使用標準的事件處理程序:

var handler = new EventHandler(Handler); 

其中

void Handler(object sender, EventArgs e) { ... } 

使得它編譯,但隨後會在運行時崩潰與

An unhandled exception of type 'System.ArgumentException' occurred in PresentationFramework.dll

Additional information: Handler type is not valid.

還有什麼可以嘗試使AddValueChanged處理依賴屬性回調?也許這種做法是錯誤的,爲什麼? ListView.View更改時我還能得到通知嗎?

我不想應用this answer中的任一解決方案:無法使用綁定(值將在xaml中設置),也不希望僅爲此設置MyListView

回答

1

這個工作對我來說:

public MainWindow() 
{ 
    InitializeComponent(); 

    DependencyPropertyDescriptor 
     .FromProperty(ListView.ViewProperty, typeof(ListView)) 
     .AddValueChanged(listView, ViewChanged); 

    listView.View = new GridView(); 
} 

private void ViewChanged(object sender, EventArgs e) 
{ 
    Debug.WriteLine("ViewChanged"); 
} 
+0

感謝您檢查,這是真正的幫助。錯誤確實來自另一個事件處理程序(這使得我的問題很糟糕),但標題+答案可能對我猜測的其他人有用。 – Sinatr