如何在XAML中直接将ComboBox的ItemsSource绑定到ResourceDictionary的所有键?
在XAML中直接绑定ComboBox的ItemsSource到ResourceDictionary的键列表
要在XAML里直接完成绑定,你需要借助ObjectDataProvider来包装ResourceDictionary的Keys集合——因为ResourceDictionary本身无法直接作为绑定源暴露它的键列表。具体实现步骤如下:
1. 调整资源字典的定义
把你的图标资源字典放到MergedDictionaries中,并给它设置x:Key(而非x:Name,资源字典内的子资源需要通过键标识),同时添加ObjectDataProvider来获取键列表:
<UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!-- 引入你的图标资源字典,设置x:Key便于后续引用 --> <ResourceDictionary x:Key="Icons" Source="..."/> </ResourceDictionary.MergedDictionaries> <!-- 用ObjectDataProvider获取Icons字典的Keys集合 --> <ObjectDataProvider x:Key="IconKeys" ObjectInstance="{StaticResource Icons}" MethodName="get_Keys"/> </ResourceDictionary> </UserControl.Resources>
2. 绑定ComboBox的ItemsSource
直接将ComboBox的ItemsSource绑定到上面定义的IconKeys资源:
<Grid> <ComboBox ItemsSource="{Binding Source={StaticResource IconKeys}}"/> </Grid>
补充说明
ObjectDataProvider的作用是调用资源字典的get_Keys方法(对应Keys只读属性的获取方法),把原本无法直接绑定的Keys集合转换成可绑定的数据源。- 如果你的资源字典是静态加载的,这种方式完全够用;如果需要动态更新资源字典的键列表,可能需要在后台代码中维护一个
ObservableCollection并同步字典的键,再绑定到这个集合。
内容的提问来源于stack exchange,提问作者barukh_t
相关产品推荐
相关产品推荐

