我有一个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>这是可行的,但我现在想在我的组合框中添加一个手动项目,它将触发称为"Other...“的替代功能。所以我不得不转而使用CompositeCollection...如下所示:
<ComboBox Name="Options"
DataContext="ClientsCollection">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding [ClientNumber], Converter={StaticResource ClientOptions} />
<ComboBoxItem>Other...</ComboBoxItem>
</CompositeCollection>
</ComboBox>尽管我可能会尝试,但在使用CompositeCollection时,绑定的项就是不会填充。它只显示手册ComboBoxItem "Other...“。如果我删除该项目,则列表为空。如果我将断点附加到转换器,它不会捕获任何东西,这似乎表明绑定甚至都没有尝试过。
显然,我对CompositeCollection中的绑定函数是如何发生的不太了解。有人能看到我的XAML中的错误或解释我遗漏了什么吗?
发布于 2012-10-06 01:32:13
在ComboBox.Resources中声明绑定并与ItemsSource=“{ CompositeCollection Source={StaticResource myCompositeCollection}}”一起使用。
<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}}" />
如果在元素语法的ItemsSource属性中声明CompositeCollection,则CollectionContainer.Collection的绑定将找不到其DataContext。
在参考资料部分中,像CompositeCollection这样的Freezables继承了它们声明元素的DataContext,就像它们是元素的逻辑子元素一样。然而,这是Resources属性的一个特长,像ContentControl.Content或类似的属性,它们包含控件的逻辑子控件(可能还有其他几个)。如果您使用元素语法来设置属性的值,一般情况下,您将不得不预期DataContext等属性的属性值继承不起作用,因此没有显式来源的绑定也不起作用。
https://stackoverflow.com/questions/12750784
复制相似问题