我有一个视图模型,其中包含一个公开事物集合的属性.我有一个ComboBox,其ItemsSource属性绑定到此集合.现在用户可以从列表中进行选择.
我想允许用户清除选择,所以我想向ComboBox添加一个项目(即Null).这很简单.
我决定尝试为ItemsSource使用CompositeCollection,以便我可以将现有列表中的项添加到ComboBox以及额外的Null项.
经过一段时间的斗争,我决定回到CompositeCollection类的文档.我复制了他们的示例并将其修改为使用视图模型而不是静态资源.
我发现当我将CollectionContainer绑定到ViewModel公开的列表时,列表中没有任何项目显示.
我不知道如何解决这个问题,我正在寻找关于这个主题的任何建议.
这是我的XAML代码:
<Window Background="CornflowerBlue" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:TryingWPF" x:Class="CompositeCollections" Title="CompositeCollections" SizeToContent="WidthAndHeight">
<Window.Resources>
<c:CompositeCollectionVM x:Key="CompositeCollectionVM"/>
<XmlDataProvider x:Key="GreekHeroesData" XPath="GreekHeroes/Hero">
<x:XData>
<GreekHeroes xmlns="">
<Hero Name="Jason" />
<Hero Name="Hercules" />
<Hero Name="Bellerophon" />
<Hero Name="Theseus" />
<Hero Name="Odysseus" />
<Hero Name="Perseus" />
</GreekHeroes>
</x:XData>
</XmlDataProvider>
<DataTemplate DataType="{x:Type c:GreekGod}">
<TextBlock Text="{Binding Path=Name}" Foreground="Gold"/>
</DataTemplate>
<DataTemplate DataType="Hero">
<TextBlock Text="{Binding XPath=@Name}" Foreground="Cyan"/>
</DataTemplate>
</Window.Resources>
<StackPanel DataContext="{StaticResource CompositeCollectionVM}">
<TextBlock FontSize="18" FontWeight="Bold" Margin="10" HorizontalAlignment="Center" Foreground="WhiteSmoke">Trying Composite Collections</TextBlock>
<DockPanel>
<ListBox Name="myListBox" Height="300" Background="#99333333">
<ListBox.ItemsSource> …Run Code Online (Sandbox Code Playgroud) 我没有得到正确的绑定语法访问Cats和Dogs属性MyViewModel内DateTemplate定义了CompositeCollection它的资源范围内.
public class MyViewModel
{
public ObservableCollection<Cat> Cats { get; private set; }
public ObservableCollection<Dog> Dogs { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
<DataTemplate DataType={x:Type local:MyViewModel}">
<DataTemplate.Resources>
<CompositeCollection x:Key="MyColl">
<!-- How can I reference the Cats and Dogs properties of MyViewModel? -->
<CollectionContainer Collection="{Binding Dogs, ????}">
<CollectionContainer Collection="{Binding Cats, ????}">
</CompositeCollection>
</DataTemplate.Resources>
<ListBox ItemsSource="{StaticResource MyColl}">
<!-- ... -->
</ListBox>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我要为????插入什么?绑定Dogs和Cats集合到CollectionContainers?
我正在后端类中使用2个列表.每个列表都是不同的类型.想要向用户显示单个列表(包含两个列表的并集),当选择此列表中的项目时,将显示项目的详细信息.
代码看起来像:
我的后端课看起来像这样的事情
public ObservableCollection<Person> People {get;}
public ObservableCollection<Product> Products {get;}
Run Code Online (Sandbox Code Playgroud)
我的XAML看起来像这样
<ListBox x:Name="TheListBox" ItemsSource={Some Expression to merge People and Products}>
<ListBox.Resources>
People and Product Data Templates
</ListBox.Resources>
</ListBox>
...
<ContentControl Content={Binding ElementName=TheListBox, Path=SelectedItem }>
<ContentControl.Resources>
Data Templates for showing People and Product details
</ContentControl.Resources>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)
有什么建议?
wpf ×3
data-binding ×2
binding ×1
c# ×1
datatemplate ×1
itemssource ×1
listbox ×1
mvvm ×1
vb.net ×1
xaml ×1