【问题标题】:How do I bind the same DataSource to two identical ListViews?如何将相同的 DataSource 绑定到两个相同的 ListView?
【发布时间】:2017-03-12 15:43:49
【问题描述】:

我在两个不同的 WPF 表单中有相同的 ListView。第一个表单打开第二个表单。当我将相同的 DataSet 和 DataTable 作为 DataSource 分配给两个 ListView 时,只有第一个在 DataTable 中的数据发生更改时才会更新。如果我删除了对第一个 Form ListView 的 DataSource 分配,那么第二个 Form ListView 会更新。

作业的代码是,

WatchListListView.ItemsSource = MyProjectDataManager.myStockDataSet.Tables["InternalWatchListTable"].AsDataView();

MyProjectDataManager 是一个持久的 C# 类,它包含并维护我的内部数据表。

如何让两个 ListView 都更新?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这不是一个“真实”的答案,但我想说的比评论还多。

    首先,程序问题。您没有绑定到 DataTable,而是绑定到该表的 DataView。这不是一件坏事,因为您应该能够创建一个表的多个 DataView 并让它们保持同步。这就是他们的目的。

    其次,要真正提供帮助,我们需要的不仅仅是您提供的代码。如果我们可以比较第一个 ListView 上的绑定以确认它们实际上是同一个表,那将会很有帮助。如果我们可以在您的 MyProjectDataManager 中看到实际代码(至少是相关位),也不会受到伤害。

    您可以尝试进一步调试的内容:

    1. 创建单个 DataView 对象并将两个 ListView 数据源绑定到同一个 DataView。这应该可以正常工作,因为 DataViews 旨在处理多个绑定场景。可能是您的 DataTable 没有通知辅助视图所做的更改,即使它确实应该通知。
    2. 为您的持久数据对象创建一个属性访问器,仅用于该表。我不禁想到你的字符串访问器可能被吓坏了。不过,这不太可能,我只是表达了我在访问表对象时对字符串的潜在厌恶。

    【讨论】:

    • 感谢您的帮助。 “您没有绑定到 DataTable,而是绑定到 DataView”是我缺少的部分。通过创建两个 DataView,每个 ListView 一个,当我修改一个 DataTable 中的数据时,两个 ListView 都会更新。 WatchListDataView = myStockDataSet.Tables["InternalWatchListTable"].DefaultView; WatchListDataViewOne = myStockDataSet.Tables["InternalWatchListTable"].DefaultView;然后在两个表单中 WatchListListView.ItemsSource = MyProjectDataManager.WatchListDataView; WatchListListView.ItemsSource = MyProjectDataManager.WatchListDataViewOne;
    • 对我来说仍然是一个谜,为什么两个 ListView 的一个 DataView 只更新了第一个而不是第二个。如果我关闭然后重新打开第二个表单,则 ListView 会更新。但是,代码正在按照我现在想要的方式使用两个 DataView。再次感谢您。
    • 我很高兴让您走上了正确的道路并且您可以正常工作。
    【解决方案2】:

    请提供代码以便更好地理解,虽然以下步骤可能有效,但您可能不喜欢。 1-以第二种形式定义一个公共函数并将您的 ListView 绑定在其中。 2- 从第一种形式编辑后,调用第二种形式的公共函数,ListView 将重新绑定 -

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2013-12-09
      • 2019-07-14
      相关资源
      最近更新 更多