ObservableCollection绑定ListView异常求助:XAML绑定无效但代码赋值可行
WPF ListView绑定ObservableCollection失效的问题解决
你的问题主要出在三个核心点上,逐个梳理解决:
1. 数据绑定仅支持公共属性,不支持字段
WPF的数据绑定系统只识别公共属性,你当前的items是公共字段(public ObservableCollection<dataModel> items;),XAML绑定无法识别它。必须将其改为带getter的公共属性:
public ObservableCollection<dataModel> items { get; set; }
2. 未设置DataContext,绑定找不到数据源
XAML里的{Binding items}默认不知道要绑定到哪个对象,因为窗口默认DataContext为null。你需要明确指定数据源:
方法一:在构造函数中设置
修改MainWindow构造函数,在InitializeComponent()后添加:
DataContext = this;
完整构造函数示例:
public MainWindow() { items = new ObservableCollection<dataModel>(); InitializeComponent(); DataContext = this; populateData(); }
方法二:在XAML中直接指定绑定源
给ListView的Binding添加RelativeSource,直接指向当前窗口:
ItemsSource="{Binding items, RelativeSource={RelativeSource AncestorType=Window}}"
3. 关于“基类可见性低于其他类”的错误
你提到的这个错误,大概率是dataModel类的可见性不匹配导致的。如果dataModel是internal,而ObservableCollection的属性是public,就会因为泛型参数可见性低于属性而报错。确保dataModel始终为public即可:
public class dataModel { public string title { get; set; } public bool isDone { get; set; } }
验证修改
完成以上调整后,XAML的绑定即可正常生效,无需再通过代码手动赋值LV1.ItemsSource = items;。
内容的提问来源于stack exchange,提问作者vastyr
相关产品推荐
相关产品推荐

