0

我想要一个带有复选框、文本的复杂组合框,并且可能是一个缩略图。我已经查看了以下链接,这些链接在构建复杂的组合框时帮助了我很多。

http://blogs.microsoft.co.il/blogs/justguy/archive/2009/01/19/wpf-combobox-with-checkboxes-as-items-it-will-even-update-on-the-fly。 aspx

寻找带有复选框的 WPF ComboBox

但是,我找不到在我的应用程序中使用这些复杂用户控件的方法。我是 WPF 的新手,因此任何形式的演示支持都将受到高度赞赏。

院长,我正在寻找一个如何在文件后面的代码中绑定的解决方案,下面的示例在前面的 SO 帖子中提到。

<ComboBox.ItemTemplate>
<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <CheckBox IsChecked="{Binding IsSelected}"
                   Width="20" />
        <TextBlock Text="{Binding DayOfWeek}"
                   Width="100" />
    </StackPanel>
</DataTemplate>

所以问题是,我需要 DataTable 或其他东西来将我的复选框和标题列表与这个组合框模板绑定吗?提前致谢

4

3 回答 3

3

组合框是一个 ItemsControl。所有 ItemsControls 都可以用项目或容器“硬编码”填充。

这会在组合框中添加一个新条目,并将字符串包装到一个 ItemsContainer 中,它是一个 ComboBoxItem。

<ComboBox>
    <sys:string>Hello</string>
<ComboBox>

这里我们直接创建一个组合框项,并将其内容添加到值为“Hello”的字符串中

<ComboBox>
    <ComboBoxItem Content="Hello"/>
<ComboBox>

两者在视觉上看起来相同。重要的是要理解,在第一种情况下,ComboBox 负责将我们的 ComboBox 未知类型字符串包装到 ComboBoxItem 中,并使用默认的 DataTemplate 来显示它。默认的 DataTemplate 将显示一个 TextBlock 并在给定的数据项上调用 ToString()。

现在要拥有动态数据,我们需要一个带有数据项的 ObservableCollection。

    class Employee
    {
        public BitmapSource Picture {get;set;}
        public string Name{get;set}
    }

ObservableCollection<Employee> employees;
myComboBox.ItemsSource = employees;

我们有一个名为 Employee 的 DataClass,一个可观察的集合,其中包含我们的许多数据项,并将此集合设置为 ItemsSource。从此时起,我们的 Combobox 会监听这个集合的变化。就像添加和删除员工一样,并自动将新员工包装到 ComboBoxItem 中。一切都是自动完成的。我们唯一需要做的就是提供一个合适的 DataTemplate。组合框不知道如何“显示”员工,而这正是 DataTemplate 的用途。

<DataTemplate x:Key="employeeTemplate">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding Picture}"/>
        <TextBlock Text="{Binding Name}"/>
    </StackPanel>
</DataTemplate>

我们知道一个员工被包裹在一个 ComboBoxItem 中,并且 ComboBoxItem 使用提供的 Datatemplate 来显示其数据,这意味着在 DataTemplate 内部我们可以使用 Binding 来访问数据项上的所有属性。

希望对您有所帮助。

于 2012-05-31T10:43:07.640 回答
1

只是回答你的问题。您所需要的只是一个具有至少 2 个公共属性(IsSelected 为 bool,DayOfWeek 为字符串)的对象集合,并将这些集合设置为 itemssource。所以你只需要一个这样的对象的集合。如果您需要示例,请发表评论。

ps:请通读 wpf 的 www 和绑定以获取基础知识。

于 2012-05-31T11:12:22.497 回答
0

您可以简单地直接添加项目

<ComboBox>
    <ComboBox.Items>
        <ComboBoxItem>
            <TextBlock Text="test text" />
        </ComboBoxItem>
        <ComboBoxItem>
            <CheckBox Content="test checkbox" />
        </ComboBoxItem>
        <ComboBoxItem>
            <Button Content="test button" />
        </ComboBoxItem>
    </ComboBox.Items>
</ComboBox>

或者如果您想使用 ItemsSource,则需要 DataTemplateSelector

<ComboBox>
    <ComboBox.ItemTemplateSelector>
        <local:MyCustomTemplateSelector />
    </ComboBox.ItemTemplateSelector>
</ComboBox>

这是一个解释 DataTemplateSelectors 的链接

http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplateselector.aspx

于 2012-05-31T10:19:15.013 回答