【问题标题】:WPF nested ListBox control does not update the list it is bound toWPF 嵌套 ListBox 控件不更新它绑定到的列表
【发布时间】:2014-08-18 16:37:13
【问题描述】:

我有以下两个类(名称已更改),它们将用于使用嵌套列表框填充 ListView

private class ObjectName //For the Listview
{
    public int ID { get; set; }
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public List<BabyObject> Field3 { get; set; }
}

private class BabyObject //For the nested Listbox
{
    public string Field1 { get; set; }
    public bool Field2 { get; set; }
}

我用一些对象填充了一个 Observable Collection,并将其设置为我的 ListView 的 ItemsSource。

我的ListView正确显示每个ListViewItem中的Objects,每个item中嵌套的listbox正确显示每个BabyObject。

问题: 如果我使用 UI 编辑 ID、Field1 或 Field2 值,内存中的 Observable Collection 也会更新 - 当然它会更新,因为绑定。但是,如果我编辑任何 BabyObject 的值,内存中的 List 不会改变。

因此,当我更改 ListView 的 Controltemplate(以便值显示在标签而不是文本框中)时,BabyObject 值会变回原来的值。

我知道在代码中更新列表时,人们经常在更新界面时遇到问题,但不是这样吗?

我很乐意回答问题并包含更多代码,但 XAML 相当大。同时,我将制作一个单独的示例列表视图,看看是否可以在较小的控件上进行测试。

谢谢

【问题讨论】:

  • 也许你有一个Binding 错误?您能否展示您如何将数据绑定到您的 BabyObject 属性?
  • 如果您不重复提交的名称,它会更容易理解。如果 BabyObject 没有更新,那么您没有正确配置绑定。显示您的 XAML。你真的看到在 BabyObject 上被调用但没有设置?

标签: c# wpf listview binding listbox


【解决方案1】:

我已经解决了这个问题,但是我不知道是什么原因造成的。

我尝试将 Baby Objects 的 Binding 设置为各种 Modes,并将 List 更改为 Observable Collection。

这不起作用,所以我手动撤消了更改(未设置模式并使用列表) - 现在它工作正常。

如果我使用界面编辑 BabyObject 值,也会对 List 进行更改。

我也很困惑——很抱歉浪费了您的时间!

【讨论】:

  • 这不是一个可以帮助任何人的答案。我建议你删除这个问题。
  • 我同意 - 我已将问题标记为版主
【解决方案2】:

您需要在设置属性时发出属性更改通知 - 这会告诉绑定更新。

MSDN docs here

【讨论】:

  • 我会试一试 - 但为什么我不需要需要为 ObjactName 类执行此操作?
  • 因为 ObservableCollection 是 WPF“感知”的
  • 我不认为你理解这个问题。我不想告诉界面我的收藏已更新。我正在尝试更新我的收藏!
  • @Robert 你能否提供更多关于你想要达到的目标的细节。当您说您的收藏不更新时,您是什么意思?如果您的意思是当您添加一个新对象时,BabyObjects 列表没有在屏幕上更新,那么也许可以尝试将 ObjectName 中的 List&lt;BabyObject&gt; 更改为 ObservableCollection&lt;BabyObject&gt;
  • 我的意思是当我使用界面编辑 BabyObjects 的值时,我的列表没有更新。我会考虑修改问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2013-12-06
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多