我正在使用wpf treeview并将ItemsSource绑定到具有IsChecked属性的ViewModel的IEnumerable . 我使用模式为TwoWay将复选框绑定到此值 . 当我检查复选框时,我可以看到当我单步执行程序时它正在我的ViewModel上正确设置此值 .
然后我有一个菜单项“运行检查” . 在这个方法中,我有一个foreach循环,它通过ItemsSource运行,因为ViewModel的IEnumerable正在寻找IsChecked = true来排列被单独程序运行的已检查项目 . 因此:
foreach (AccountViewModel account in tvClientList.ItemsSource as IEnumerable<AccountViewModel>)
{
if (account.IsChecked)
{
context.Queues.InsertOnSubmit(new Queue {Id = account.Id});
}
}
但是,account.IsChecked始终为false . 为什么是这样?
2 回答
只为其他人遇到这个问题 . ItemsSource返回一组新数据,Items包含当前的数据集 .
我会检查以下内容 .
单击treeview复选框时,
会调用AccountViewModel.Ischecked的setter . 如果没有 - 那就是问题,如果是,你应该看看你的集合绑定 .
调试你的foreach并检查treeviewitemssource是你期望的集合 .
也许你可以发布你的绑定,如果这一切都没有帮助 .
ps:如果使用viewmodels / mvvm,则不要直接访问View控件 .