Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将组合框转换为使用绑定的CompositeCollection?_Wpf_Xaml_Binding_Combobox_Compositecollection - Fatal编程技术网

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}}" />