2017-10-12 35 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