在我的项目中,我目前在ObservableCollection
构造函数中填充了ViewModel
。此ObservableCollection
包含一个自定义对象,该对象具有两个属性(两个字符串)。
目前,XAML / View对应文件夹有两个单独的列表框,这两个列表框都绑定到DataTemplate
,用于选择要在ListBox
中显示为条目的属性。在这种情况下,它会显示'propertyOne'。
是否可以让DataTemplate
根据'propertyTwo'的内容选择每个ListBox
项目所在的位置?
我已经查看了类似于我的情况的示例,它使用了CollectionViewSource
,但我不太清楚如何将其实现到我的项目中,因为我对使用WPF并遵循MVVM结构相当新。这会涉及在View后面的代码中创建过滤器事件吗?
下面列出的是我的代码片段,我认为这对我的问题有用。任何有关解决这个问题的帮助都将非常感激。
<Window.Resources>
<DataTemplate x:Key="ListBoxTemplate">
<StackPanel>
<TextBlock Text="{Binding Path=propertyOne}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
<ListBox x:Name="ListBoxOne"
Height="Auto"
Width="Auto"
ItemsSource="{Binding TestCollection}"
ItemTemplate="{StaticResource ListBoxTemplate}" />
<ListBox x:Name="ListBoxTwo"
Height="Auto"
Width="Auto"
ItemsSource="{Binding TestCollection}"
ItemTemplate="{StaticResource ListBoxTemplate}" />
public class ViewModel
{
public ObservableCollection<Item> TestCollection { get; set; }
public ViewModel()
{
//populates the collection from an XML file
//with propertyOne & propertyTwo for each item
TestCollection = CustomObjectClass.DeserializeToColl<Item>("path");
}
}
public class CustomObjectClass
{
public string propertyOne { get; set; }
public string propertyTwo { get; set; }
}
答案 0 :(得分:1)
<DataTemplate x:Key="ListBoxTemplate">
<StackPanel>
<StackPanel.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=propertyTwo}" Value="read">
<Setter Property="StackPanel.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Text="{Binding Path=propertyOne}" />
</StackPanel>
</DataTemplate>