Ref*_*din 3 .net c# linq wpf stackpanel
我是WPF的新手.我有一个页面,显示来自SQL数据库的数据使用L2S.在L2S返回一个DataTable包含所有可用的选项,从一个特定的区域选择.它从DataBase返回的每一行都需要是一个checkbox,我想把这些复选框放在一个stackpanel.
我在看数据绑定StackPanel吗?这感觉不对......我猜我需要循环遍历DataTable并为每一行创建复选框项,然后在运行时将它们添加到StackPanel.它是否正确?回归DataTable问题的一部分?
我看到它StackPanel有一个DataContext属性,但我不能只设置它因为它不知道使每个项目成为一个checkbox,对吗?
你可能想要一个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属性获取其数据.
| 归档时间: |
|
| 查看次数: |
1732 次 |
| 最近记录: |