编程语言
首页 > 编程语言> > c# – 使用Database中的复选框填充StackPanel

c# – 使用Database中的复选框填充StackPanel

作者:互联网

我是WPF的新手.我有一个页面,使用L2S显示来自SQL数据库的数据. L2S返回一个DataTable,其中包含可供特定区域选择的所有可用选项.它从DataBase返回的每一行都需要是一个复选框,我想将这些复选框放在一个stackpanel中.

我在看StackPanel的数据绑定吗?这感觉不对……我猜我需要遍历DataTable并为每一行创建复选框项,然后在运行时将它们添加到StackPanel.它是否正确?返回DataTable是我问题的一部分吗?

我看到StackPanel有一个DataContext属性但是我不能只设置它因为它不知道使每个项目成为复选框,对吗?

解决方法:

你可能想要一个ItemsControl.这允许您使用指定的DataTemplate呈现一系列项目.你可以在ItemsControl中内联:

   <ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>  

或者从资源中明确引用数据模板……更像是:

    <!-- In some parent resource section -->
    <DataTemplate x:Key="MyDataTemplateName">
        <CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
    </DataTemplate>

    <!-- ... -->

    <ItemsControl ItemsSource="{Binding MyCollectionOfItems}" ItemTemplate="{StaticResource MyDataTemplateName}">
    </ItemsControl>

或者,您可以定义一个DataTemplate,用于定义绑定类的外观. (请注意,如果你的Linq-to-SQL投射到匿名类型,这不是一个选项)类似于:

        <!-- In some parent resource section -->
        <DataTemplate DataType="{x:Type MyBoundClass}">
            <CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
        </DataTemplate>

    <!-- ... -->

    <ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
    </ItemsControl>

然后,WPF将查找与集合中每个项目的DataType相匹配的DataTemplate.请注意,这对于绑定需要不同演示文稿的异构集合非常有用.

您可以绑定Stackpanel的DataContext,但是没有关于为每个数据元素重复模板的固有逻辑.它只是为子控件提供了一个上下文,并包含了{Binding …}语句.处理重复数据的所有控件都来自ItemsControl,并通过ItemsSource属性获取其数据.

标签:c,net,linq,wpf,stackpanel
来源: https://codeday.me/bug/20190717/1484679.html