WPF C# - 复杂数据绑定

时间:2013-08-21 12:02:34

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

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

  • 2个名为mainTablesecondaryTable
  • 的SQL CE表
  • 1 Fluidkit ElementFlow control名为myElmntFlow
  • 2个名为myUsrCtrlotherUsrCtrl
  • 的UserControl

以上所有内容都已创建并实现,但UserControls通过lenghty后台工作代码以编程方式填充到myElmntFlow控件的项目列表中,当需要输入的项目数量为n时,该代码需要花费大量时间才能运行> 20。

这是他们现在创建的方式: backgroundworker循环遍历mainTable的每一行,并将myUsrCtrl控件添加到myElmntFlow中的项列表中,如果“Selected”列中的行的值=“'是'”。

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

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

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

  • mainTable中,第4行的FullName值为“Chad Jones”和 也有选择值“是”。
  • myUsrCtrl控件的新实例添加到 myElmntFlow的项目清单如下: myElmntFlow.Items.Add(myUsrCtrl);
  • 新添加的myUsrCtrl控件有一个stackpanel(stckPanel
  • 我们过滤了FullName =“Chad Jones”
  • 所在的secondaryTable
  • 对于现已过滤的secondaryTable中的每一行,我们添加一个新行 otherUsrCtrl到先前创建的myUsrCtrl的实例 stckPanel控件
  • otherUsrCtrl中的不同标签使用的值填充 secondaryTable
  • 中的一行

这可能会在控件的XAML中转换为DataBinding,因为我想稍后实现几个功能(例如一个带有自动完成功能的漂亮的SearchBox),如果要通过编写数百个来编写它们,这将非常糟糕用于判断要过滤,排序,获取,比较等数据的行...

我尽可能清楚地写了这封信,希望这是可以理解的。

PS:我想保留我的SQL结构,因为随着时间的推移,数据将变得非常紧张,我相信SQL是操纵数千行的方法。

1 个答案:

答案 0 :(得分:1)

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

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

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

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