我正在使用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。这是为什么?
答案 0 :(得分:0)
我会检查以下内容。
单击treeview复选框时会调用AccountViewModel.Ischecked的setter。如果没有 - 那就是问题,如果是,你应该看看你的集合绑定。
调试你的foreach并检查treeviewitemssource是你期望的集合。
也许你可以发布你的绑定,如果这一切都没有帮助。
ps:如果使用viewmodels / mvvm,则不要直接访问View控件。
答案 1 :(得分:0)
只为遇到此问题的其他人。 ItemsSource返回一组新数据,Items包含当前的数据集。