【问题标题】:C# WPF Databinding to Unkown Amount of CheckboxesC# WPF 数据绑定到未知数量的复选框
【发布时间】:2010-02-08 07:33:52
【问题描述】:

在我的应用程序中,我为每个可能的类别(从数据库中检索)生成复选框,并且用户可以检查任何适用的数字。我将复选框命名为“cbCategory[ID]”,其中 ID 是数据库中该类别的 ID。

然后我需要生成某种集合类(作为我的对象类的属性)来存储 categoryID 和一个布尔值(选中/未选中)。

我的问题是,最好使用哪种类型的集合类,我将如何绑定它?绑定后的 XAML 和代码是什么样的?

希望这可以很好地解释它,在此先感谢您的回答!

【问题讨论】:

    标签: c# wpf collections checkbox data-binding


    【解决方案1】:
    1. 定义一个类来保存类别名称 (string) 及其检查状态 (bool)。
    2. 定义一个 ObservableCollection<T> 类型的集合,其中 T 是您刚刚在 (1) 中定义的类。
    3. 在 XAML 中创建一个 ItemsControl 并将其 ItemsSource 属性绑定到来自 (2) 的集合。
    4. 在显示CheckBoxTextBlock 的XAML 中定义DataTemplate,将它们绑定到来自(1) 的对象中的适当属性。
    5. 不要忘记将您的 ItemsControl.ItemTemplate 设置为 (4) 中的 DataTemplate

    使用这种方式,您不需要从代码生成控件,您需要生成的是每个类别一个对象(在(1)中定义的对象)。

    作为一个需要考虑的旁注 - 每当您从代码手动生成控件时 - 您做错了,并且有一种更简单的方法使用绑定、样式和模板(有时还有更高级的功能,例如附加属性等.)

    【讨论】:

    • “每当你从代码中手动生成控件时——你做错了”:虽然我倾向于同意这一点,但只有当你使用像 MVVM 这样的模式时才会这样......有些人们可能更喜欢使用代码隐藏 ;)
    • 喜欢使用代码隐藏意味着只要您记得自己的编码方式,您的应用程序就会一直存在。
    • 感谢 Aviad。我在编程方面非常缺乏经验,对于 OOP 更是如此,所以这个解释很有帮助。
    • 我认为 Aviad 的断言实际上是一个断言,即当您在 WPF 中工作并且不使用 MVVM 时,您做错了。我敢肯定在某些情况下这是不正确的,但我现在想不出一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2014-02-03
    • 2011-08-25
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多