【问题标题】:WPF C# - Complex Data BindingWPF C# - 复杂数据绑定
【发布时间】:2013-08-23 19:02:06
【问题描述】:

我有一个非常复杂的数据绑定,我想在这里使用以下方法完成:

  • 2 个名为 mainTablesecondaryTable 的 SQL CE 表
  • 1 Fluidkit ElementFlow control 命名为 myElmntFlow
  • 2 个名为 myUsrCtrlotherUsrCtrl 的用户控件

以上所有内容都已创建并实现,但用户控件通过冗长的后台工作代码以编程方式填充到myElmntFlow 控件的项目列表中.

这是它们现在的创建方式: 如果“Selected”列中的行值=“'Yes'”,则后台工作程序循环遍历mainTable 的每一行并将myUsrCtrl 控件添加到myElmntFlow 中的项目列表中。

然后,它将新添加的myUsrCtrl 的内容修改为:它在myUsrCtrl 的堆栈面板(名为stckPanel)中为secondaryTable 中的每一行添加一个otherUsrCtrl,其中的值“FullName”列 = 我们用于创建 myUsrCtrl 控件的 mainTable 行的同一列的值。

然后用当前查看的secondaryTable 行的值填充otherUsrCtrl 的多个标签。

非常令人困惑,但这是一个复杂的场景。举个例子:

  • mainTable 中,第 4 行的 FullName 值为“Chad Jones”,并且 还具有“是”的选定值。
  • myUsrCtrl 控件的新实例添加到 myElmntFlow 的项目列表如下: myElmntFlow.Items.Add(myUsrCtrl);
  • 新添加的 myUsrCtrl 控件有一个堆栈面板 (stckPanel)
  • 我们过滤 secondaryTable,其中 FullName = "Chad Jones"
  • 对于现在过滤的secondaryTable 中的每一行,我们添加一个新的 otherUsrCtrl 的实例到先前创建的 myUsrCtrlstckPanel控制
  • otherUsrCtrl 中的不同标签填充有 排在secondaryTable

这是否可以在控件的 XAML 中转换为 DataBinding,因为我想稍后实现几个功能(例如带有自动完成功能的漂亮 SearchBox),如果它们要通过编写数百个来编码,那将是相当糟糕的行来告诉哪些数据要过滤、排序、获取、比较等......

我尽可能清楚地写了这个,只是希望它可以理解。

PS:我想保留我的 SQL 结构,因为随着时间的推移,数据会变得相当重要,而且我相信 SQL 是处理数千行时的最佳选择。

【问题讨论】:

  • 为什么要手动添加到 myElmntFlow.Items 而不是绑定到集合?您是在后台创建 myUsrCtrl 吗?
  • 我的用户控件已经创建,但在后面的 C# 代码中作为新实例被调用。您的第一点是为什么我首先问这个问题,我想将其更改为 Binding 模型但我不熟悉它。
  • 如果 ElementFlow 不是绑定到集合(转发器控件)的控件,则考虑另一种设计。如果它绑定到一个集合,那么就这样做。如果您不熟悉绑定到集合,请从简单的 ListView 控件开始。

标签: c# wpf data-binding user-controls


【解决方案1】:

这不是一个非常令人困惑的场景,只是因为那里进行的复杂处理而令人困惑。使用绑定和 MVVM (Model-View-ViewModel) 确实可以变得更容易,所以请花一些时间阅读它的基础知识。网络上有大量的教程和介绍性材料,一个简单的搜索就足以让您继续学习。

当您对这些概念感到满意时,您只需将数据转换为一系列对象(无论您如何处理),然后使用 ItemsControl 来表示项目列表的 UI。使用 DataTemplates 指定每个项目的显示方式,将 DataTemplate 中的元素绑定到每个项目的属性。这些东西可以嵌套,因此您可以在 DataTemplates 中使用 ItemsControls 来使用其他 DataTemplates 等。

为了表示绑定到 ItemsControl 的项目集合,请查看使用 ICollectionView,这将极大地帮助过滤/排序/等。

很抱歉,笔画非常宽泛,但这是一个非常宽泛的问题。如果您需要更具体的帮助,我很乐意添加更多。

【讨论】:

  • 感谢您的建议。虽然我没有得到更具体的答案,但我将阅读它们。我为任何想要某种“教程”的人找到了一个很好的链接:blog.lab49.com/archives/2650
  • 好的,我已经查看了数据绑定,它似乎对我有用,谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2017-07-04
  • 2014-02-02
  • 2013-02-04
相关资源
最近更新 更多