我有一个 ComboBox,它有一个绑定的项目源......我已经将我的示例剥离到关键部分:
<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>
尽我所能,使用 CompositeCollection 时绑定的项目不会填充。它仅显示手动 ComboBoxItem“其他...”。如果我删除该项目,则列表为空。如果我将断点附加到转换器,它不会捕获任何东西,这似乎表明甚至没有尝试绑定。
我显然不了解 CompositeCollection 中的绑定功能是如何发生的。有人可以在我的 XAML 中看到错误或解释我缺少什么吗?