WPF ListView绑定ObservableCollection时出现DataTemplate类型转换错误如何解决
错误根因
你在Window.Resources中定义的键为ListViewTemplate的资源实际为ListView控件类型,而ListView.ItemTemplate属性要求接收DataTemplate类型值,强制类型转换不匹配触发异常。
修正方案
1. 调整XAML资源定义
将原本嵌套在ListView内的DataTemplate提取为独立资源:
<!-- Data Template --> <Window.Resources> <DataTemplate x:Key="TestClassItemTemplate"> <StackPanel> <TextBlock Text="{Binding attribute1}" /> <TextBlock Text="{Binding attribute2}" /> <TextBlock Text="{Binding attribute3}" /> </StackPanel> </DataTemplate> </Window.Resources>
2. 修改后台资源引用代码
调整ItemTemplate赋值逻辑,匹配正确的DataTemplate资源键:
ListView listView = new ListView(); listView.ItemsSource = TestClass.GetTestClassCollection(); listView.ItemTemplate = (DataTemplate)this.FindResource("TestClassItemTemplate"); mainGrid.Children.Add(listView);
3. 修正TestClass属性定义(必改否则绑定失效)
当前TestClass的第三个属性命名与赋值、绑定逻辑不匹配,需统一修改:
class TestClass { public string attribute1 { get; set; } public string attribute2 { get; set; } // 原属性名为attribute,修正为与赋值、绑定一致的attribute3 public string attribute3 { get; set; } }
内容的提问来源于stack exchange,提问作者Sabina
相关产品推荐
相关产品推荐

