【问题标题】:WPF TreeView ItemsSource not keeping valuesWPF TreeView ItemsSource 不保留值
【发布时间】:2011-08-17 09:43:04
【问题描述】:

我正在使用 wpf 树视图并将 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。这是为什么呢?

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    仅适用于遇到此问题的其他人。 ItemsSource 返回一组新数据 Items,但包含当前数据集。

    【讨论】:

      【解决方案2】:

      我会检查以下内容。

      1. 当单击树视图复选框时,是否调用 AccountViewModel.Ischecked 的设置器。如果不是 - 那么这就是问题如果是的话,你应该看看你的集合绑定。

      2. 调试您的 foreach 并检查 treeviewitemssource 是否是您期望的集合。

      也许你可以发布你的绑定,如果这一切都没有帮助。

      ps:如果您使用 viewmodels/mvvm,请不要直接访问您的视图控件。

      【讨论】:

      • 1 和 2,均使用调试器检查。我唯一能想到的是,当我使用 tvClientList.ItemSource 时,它​​会重新查询连接的 Linq 以获得 IEnumerable。
      猜你喜欢
      • 2018-04-09
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2012-05-11
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多