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


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


以上所有步骤均已创建和实现,但通过冗长的backgroundworker代码以编程方式将UserControl填充到myElmntFlow控件的项目列表中,当要输入的项目数大于20时,运行该代码会花费大量时间。

到目前为止,这是它们的创建方式:
如果“ Selected”列中的行的值等于“'Yes'”,则背景工作人员将遍历mainTable的每一行并将myUsrCtrl控件添加到myElmntFlow中的项目列表中。

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

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

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


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


可以将其转换为控件的XAML中的DataBinding吗,因为我以后要实现几个功能(例如带有自动完成功能的漂亮SearchBox),如果要通过写几百行代码来对它们进行编码的话,这些功能将非常差告诉您要过滤,排序,获取,比较等数据...

我写得尽可能清楚,只是希望它是可以理解的。

PS:我想保留我的SQL结构,因为随着时间的流逝数据将变得相当重要,我相信SQL是处理数千行代码时要走的路。

最佳答案

这不是一个非常令人迷惑的场景,只是由于那里发生的复杂处理而令人困惑。使用绑定和MVVM(Model-View-ViewModel)确实可以使它变得容易得多,因此请花一些时间来阅读它的基础知识。网络上有大量的教程和入门资料,简单的搜索将为您提供足够的继续学习的机会。

当您熟悉这些概念时,所需要做的就是将数据转换为一系列对象(无论如何处理),然后使用ItemsControl代表项目列表的UI。使用DataTemplates指定应如何显示每个项目,并将DataTemplate中的元素绑定到每个项目的属性。这些东西可以嵌套,这样您就可以在DataTemplates中拥有ItemsControls,从而使用其他DataTemplates等。

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

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

关于c# - WPF C#-复杂数据绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18356886/

10-09 09:31