Wpf 如何将组合框转换为使用绑定的CompositeCollection?
我有一个组合框,其中有一个绑定项源。。。我已将我的示例精简到关键部分:Wpf 如何将组合框转换为使用绑定的CompositeCollection?,wpf,xaml,binding,combobox,compositecollection,Wpf,Xaml,Binding,Combobox,Compositecollection,我有一个组合框,其中有一个绑定项源。。。我已将我的示例精简到关键部分: <UserControl x.Class="My.Application.ClientControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<UserControl x.Class="My.Application.ClientControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:conv="clr-namespace:My.Utilities.Converters"
Name="ClientControl">
<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource Key="x:ClientsCollection" />
</ResourceDictionary>
<conv:ClientOptions x:Key="ClientOptions" />
</UserControl.Resources>
...
<ComboBox Name="Options"
DataContext="ClientsCollection"
ItemsSource="{Binding [ClientNumber], Converter={StaticResource ClientOptions}" />
</UserControl>
...
这是可行的,但我现在想在我的组合框中添加一个手动项,它将触发名为“其他…”的替代功能,因此我必须使用CompositeCollection。。。像这样:
<ComboBox Name="Options"
DataContext="ClientsCollection">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding [ClientNumber], Converter={StaticResource ClientOptions} />
<ComboBoxItem>Other...</ComboBoxItem>
</CompositeCollection>
</ComboBox>
在ComboBox.Resources中声明CompositeCollection,并将其与ItemsSource=“{Binding Source={StaticResource myCompositeCollection}}”一起使用
你能把你的答案充实一点吗。。。如果我将其移动到Resources部分并设置ItemsSource={Binding Source={StaticResource…}},那么如何设置CollectionContainer的上下文呢。。。我的组合框当前已绑定到数据上下文。。。我的客户集合;my ComboBox.ItemsSource绑定到一个选项列表,该列表将根据my ClientsCollection中当前选定的客户端而更改。我在哪里定义这种关系[上下文]?在资源或组合框中?你能发布一个代码片段来澄清吗?嗯,编辑你的代码,我发现了一些奇怪的事情。你确定第一个例子有效吗?通常DataContext=“ClientsCollection”应生成文本字符串“ClientsCollection”。。。我发现我必须使用UserControl的Resources部分,因为当ComboBox.ItemsSource中的资源没有在前面声明时,我不能使用它。不过,我写的东西仍然有效……谢谢,那个代码片段太棒了。正是我需要的:D
<UserControl x.Class="My.Application.ClientControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:conv="clr-namespace:My.Utilities.Converters"
Name="ClientControl">
<UserControl.Resources>
<ResourceDictionary>
<CollectionViewSource Key="x:ClientsCollection" />
</ResourceDictionary>
<conv:ClientOptions x:Key="ClientOptions" />
<CompositeCollection x:Key="myCompositeCollection">
<CollectionContainer Collection="{Binding Source={StaticResource ClientsCollection}, Path=[ClientNumber], Converter={StaticResource ClientOptions} />
<ComboBoxItem>Other...</ComboBoxItem>
</CompositeCollection>
</UserControl.Resources>
...
<ComboBox Name="Options"
DataContext="ClientsCollection"
ItemsSource="{Binding Source={StaticResource myCompositeCollection}}" />