2

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

  • mainTable2 个名为和的SQL CE 表secondaryTable
  • 1 Fluidkit ElementFlow 控件命名为myElmntFlow
  • 2个用户控件命名myUsrCtrlotherUsrCtrl

以上所有内容都已创建并实现,但用户控件myElmntFlow通过冗长的后台工作代码以编程方式填充到控件的项目列表中,当要输入的项目数大于 20 时,运行该代码确实需要一些时间。

到目前为止,它们是这样创建的:如果“Selected”列中的行值 =“'Yes'” ,backgroundworker 循环遍历每一行mainTable并将myUsrCtrl控件添加到项目列表中。myElmntFlow

然后,它修改新添加的内容:它为每一行myUsrCtrl添加 aotherUsrCtrl到堆栈面板(myUsrCtrl名为创建了控件。stckPanelsecondaryTablemainTablemyUsrCtrl

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

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

  • mainTable中,第 4 行的 FullName 值为“Chad Jones”,并且 Selected 值为“Yes”。
  • 控件的新实例myUsrCtrl被添加到 的 myElmntFlow项目列表中,如下所示: myElmntFlow.Items.Add(myUsrCtrl);
  • 新添加的 myUsrCtrl 控件有一个 stackpanel ( stckPanel)
  • 我们过滤secondaryTableFullName = "Chad Jones" 的地方
  • 对于现在过滤的每一行,我们向先前创建的 控件secondaryTable添加一个新实例otherUsrCtrlmyUsrCtrlstckPanel
  • 中的不同标签otherUsrCtrl填充了中行的值secondaryTable

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

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

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

4

1 回答 1

1

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

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

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

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

于 2013-08-21T12:15:54.087 回答