WPF MVVM中DataTemplate无法识别ViewModel内Item类型的问题
解决WPF ListBox DataTemplate DataType报错及绑定问题
先搞定DataType报错的核心问题
- 确认Item类的真实命名空间:打开你的
Item类代码文件,看顶部的namespace声明——很多新手会把实体类放在Model命名空间(比如SBCM.MVVM.Model)而非ViewModel,如果是这种情况,XAML里的命名空间引用和DataType指定都要对应调整。 - 检查XAML的命名空间引用:在XAML根元素(Window/UserControl)里,确认你声明的
viewmodel命名空间指向的是Item类所在的正确命名空间。比如如果Item在Model里,要添加:
然后DataType改成:xmlns:model="clr-namespace:SBCM.MVVM.Model"<DataTemplate DataType="{x:Type model:Item}"> - 强制编译项目:VS的智能感知偶尔会滞后,按
Ctrl+Shift+B编译整个项目,之后再看报错是否消失。
解决移到View的cs文件后无法绑定的问题
如果把ObservableCollection<Item>放到PackManagerView.xaml.cs里,需要满足两个条件:
- 这个集合必须是公共属性,比如:
public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>(); - 确保View的DataContext指向自身,在View的构造函数里添加:
或者绑定的时候用public PackManagerView() { InitializeComponent(); DataContext = this; }RelativeSource指定View,避免依赖DataContext:<ListBox ItemsSource="{Binding Items, RelativeSource={RelativeSource AncestorType={x:Type local:PackManagerView}}}" />
内容的提问来源于stack exchange,提问作者Jacob Bender
相关产品推荐
相关产品推荐

