我应该如何绑定组合框';s项目内容和项目的来源
本文关键字:项目 何绑定 绑定 组合 我应该 | 更新日期: 2023-09-27 18:30:07
问题
我有一个包含ToggleButton
和ComboBox
的UserControl
。控件将允许用户选择排序类型(通过ComboBox
)和方向(通过ToggleButton
)。我希望能够公开ComboBox
和更多的一些属性,那么我如何将ComboBox
的ItemsSource绑定到UserControl
的Items
属性(我将自己实现),以及内置的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
,但我需要公开以下内容(但不确定如何):
- 侧面有一个CCD_ 15
- 作为布尔的
SortDirection
属性 RoutedEvent
用于Ascending
和Descending
在usercontrol
中定义SortDirection
、Items
的依赖属性。一旦你控制了这些属性,你就可以直接从外部设置它们,比如:
<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。