我应该如何绑定组合框';s项目内容和项目的来源

本文关键字:项目 何绑定 绑定 组合 我应该 | 更新日期: 2023-09-27 18:30:07

问题

我有一个包含ToggleButtonComboBoxUserControl。控件将允许用户选择排序类型(通过ComboBox)和方向(通过ToggleButton)。我希望能够公开ComboBox和更多的一些属性,那么我如何将ComboBox的ItemsSource绑定到UserControlItems属性(我将自己实现),以及内置的Content属性——类似于ComboBox如何同时实现这两个属性。

UserControl

我有一个用户控件,它的设置与下面的代码类似,或者看这里。

<UserControl x:Class="Example.DirComboBox">
    <Grid>
        <ComboBox x:Name="cbItems" />
        <ToggleButton x:Name="tbSortDir"/>
    </Grid>
</UserControl>

控件使用

我希望能够以两种方式使用它:

1:

添加子元素。

<local:DirComboBox>
    <ComboboxItem Content="Item 1"/>
</local:DirComboBox>

2:

绑定Items属性。

<local:DirComboBox Items="{Binding SortList}"/>

备选方案

我愿意使用替代方案,例如将根设置为ComboBox而不是UserControl,但我需要公开以下内容(但不确定如何):

  1. 侧面有一个CCD_ 15
  2. 作为布尔的SortDirection属性
  3. RoutedEvent用于AscendingDescending

我应该如何绑定组合框';s项目内容和项目的来源

usercontrol中定义SortDirectionItems的依赖属性。一旦你控制了这些属性,你就可以直接从外部设置它们,比如:

<local:DirComboBox Items="{Binding SortList}" SortDirection="{Binding Sort}"/>

然后在您的控件内将这些属性绑定到相应的控件,如:

<UserControl x:Class="Example.DirComboBox">
    <Grid>
        <ComboBox x:Name="cbItems" ItemsSource="{Binding Items, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}"}/>
        <ToggleButton x:Name="tbSortDir" IsPressed="{Binding SortDirection, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}"/>
    </Grid>
</UserControl>

保持绑定模式为双向。

我的控制不是基于UserControl,而是根据MSDN上的教程使用CustomControl。