Monitor for ListView.View的变化
问题描述:
我想从后面的代码的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
。
答
这个工作对我来说:
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");
}
感谢您检查,这是真正的帮助。错误确实来自另一个事件处理程序(这使得我的问题很糟糕),但标题+答案可能对我猜测的其他人有用。 – Sinatr