我想从GridView
ListView
的代码后面设置样式。由于那是ListView.View
依赖属性,我想监视它何时被更改。
尝试从this answer添加依赖项属性更改回调:
var handler = new DependencyPropertyChangedEventHandler(Handler);
DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty,
typeof(ListView)).AddValueChanged(listView, handler);
其中handler是
void Handler(object sender, DependencyPropertyChangedEventArgs e) { ... }
会导致编译错误:
错误CS1503参数2:无法从'System.Windows.DependencyPropertyChangedEventHandler'转换为'System.EventHandler'
尝试强制转换(EventHandler)handler
仍然让编译器抱怨:
错误CS0030无法将类型'System.Windows.DependencyPropertyChangedEventHandler'转换为'System.EventHandler'
如果我尝试使用标准事件处理程序:
var handler = new EventHandler(Handler);
,其中
void Handler(object sender, EventArgs e) { ... }
使其可编译,但随后会在运行时崩溃
PresentationFramework.dll中出现未处理的“System.ArgumentException”类型异常
其他信息:处理程序类型无效。
我还可以尝试使AddValueChanged
使用依赖项属性回调吗?也许这种做法是错误的,为什么?如果ListView.View
发生变化,我还能收到通知吗?
我不想应用this answer中的任何一种解决方案:不能使用绑定(值将在xaml中设置)并且不想仅为此生成MyListView
。< / p>
答案 0 :(得分: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");
}