【问题标题】:WPF custom control objects databinding to List(T) based on query基于查询的 WPF 自定义控件对象数据绑定到 List(T)
【发布时间】:2010-01-04 17:06:33
【问题描述】:

在我的 WPF 应用程序的窗口中,我有数百个对象,它们基于自定义控件。它们仅在名称上有所不同:

...
<MyNamespace:MyCustControl x:Name="x4y3" />
<MyNamespace:MyCustControl x:Name="x4y4" />
<MyNamespace:MyCustControl x:Name="x4y5" />
<MyNamespace:MyCustControl x:Name="x4y6" />
<MyNamespace:MyCustControl x:Name="x4y7" />
...

自定义控件以及因此这些对象具有一些属性。这些属性的值应该从使用 LINQ to SQL 查询从 SQL Server 数据库填充的 List(T)(或其他类型的通用集合)更新。

为了区分每个对象对应的记录,我们在集合中有一个字段,其中包含这些对象的名称:“x4y3”、“x4y4”、“x4y5”、...和以此类推。

我的问题是:

是否可以根据每个对象的名称与通用集合中相应字段的值相等的条件,建立这些对象的总数与该通用集合的数据绑定连接?

【问题讨论】:

    标签: wpf linq-to-sql generics data-binding custom-controls


    【解决方案1】:

    将ItemControl 与DataTemplate 结合使用是完全可能的。与其创建自定义控件的显式列表,不如创建一个ItemsControl 并将其ItemsSource 属性绑定到您的集合。将 ItemTemplate 设置为包含您的自定义控件的 DataTemplate。

    例子:

    <Window.Resources>
        <DataTemplate x:Key="MyTemplate">
            <MyNamespace:MyCustControl/>
        </DataTemplate>
    </Window.Resources>
    ...
        <ItemsControl ItemsSource="{Binding MyCollection}" 
                      ItemTemplate="{StaticResource MyTemplate}"/>
    

    要显示数据对象中的值,只需绑定自定义控件中的元素,因为它们每个都有不同的数据对象作为它们的DataContext。

    【讨论】:

    • 感谢您的指导!老实说,我什至不知道如何处理这个问题。但是你的话听起来很有希望,现在我被鼓励去学习和尝试这个。但是,坦率地说,我不明白每个对象如何识别他对应的集合中的哪条记录。我们使用它的名称来了解要读取的记录(或者,正确地说是数据绑定)
    • 此处未使用名称。当 WPF 为列表生成项目时,它会将每个项目的 DataContext 属性设置为它所代表的数据对象。然后,您可以从 DataTemplate 或其任何子对象(例如您的自定义控件)中绑定该数据对象。
    • 还有一件事,传统上(在 WPF 出现之前)我们习惯于将我们的值从代码推送到显示器,如果您反过来执行此操作,WPF 效果最好,将数据引用放在 XAML 和不要尝试将数据从代码推送到视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多