使用Database中的复选框填充StackPanel

Ref*_*din 3 .net c# linq wpf stackpanel

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

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

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

Ben*_*orf 8

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

   <ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding NameOfTheCheckedPropertyOnEachItem}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>  
Run Code Online (Sandbox Code Playgroud)

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

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

    <!-- ... -->

    <ItemsControl ItemsSource="{Binding MyCollectionOfItems}" ItemTemplate="{StaticResource MyDataTemplateName}">
    </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

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

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

    <!-- ... -->

    <ItemsControl ItemsSource="{Binding MyCollectionOfItems}">
    </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

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

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