我应该如何将Combobox的ItemsSource绑定到内容和项目

时间:2013-09-04 17:47:02

标签: c# wpf binding user-controls expression-blend

问题

我有UserControl,其中包含ToggleButtonComboBox。该控件将允许用户选择排序类型(通过ComboBox)和方向(通过ToggleButton)。我希望能够公开ComboBox以及更多的一些属性,那么如何将ComboBox的ItemsSource绑定到Items的{​​{1}}属性,我会自己实现,但也会内置UserControl属性 - 类似于Content可以同时执行这两种操作。

用户控件

我有一个用户控件,其设置与下面的代码类似,或look here

ComboBox

控制用法

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

1

添加子元素。

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

2

绑定<local:DirComboBox> <ComboboxItem Content="Item 1"/> </local:DirComboBox> 属性。

Items

替代

我愿意使用替代方法,例如将根设置为<local:DirComboBox Items="{Binding SortList}"/> 而不是ComboBox,但我需要公开以下内容(但不确定如何):

  1. 侧面有一个UserControl
  2. ToggleButton属性作为bool
  3. SortDirection代表RoutedEventAscending

2 个答案:

答案 0 :(得分:0)

SortDirection中为Itemsusercontrol定义依赖属性。在控件中拥有这些属性后,您可以直接从外部设置它们,如:

<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>

保持绑定模式为twoway。

答案 1 :(得分:0)

而不是基于UserControl的控制权,而是根据the Tutorial on MSDN更改为使用CustomControl。