gpt4 book ai didi

c# - 使用数据库中的复选框填充 StackPanel

转载 作者:行者123 更新时间:2023-11-30 13:34:42 24 4
gpt4 key购买 nike

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

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

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

最佳答案

您可能需要一个 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 来定义绑定(bind)类的外观。 (请注意,如果您的 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。请注意,这对于绑定(bind)需要不同表示的异构集合非常有帮助。

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

关于c# - 使用数据库中的复选框填充 StackPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com