В моем проекте у меня в настоящее время есть ObservableCollection
, который заполняется внутри моего конструктора ViewModel
. Этот ObservableCollection
содержит пользовательский объект, который имеет два свойства (обе строки).Фильтрация ObservableCollection для множества списков
В настоящее время экземпляр XAML/View имеет два отдельных списка, оба из которых связаны с DataTemplate
, который выбирает, какое свойство будет отображаться как запись в ListBox
. В этом случае отображается «propertyOne».
Возможно ли иметь DataTemplate
, который может выбрать, где каждый ListBox
-item идет в зависимости от содержания 'propertyTwo'?
Я рассмотрел примеры, подобные моей ситуации, которые использовали CollectionViewSource
, но я не слишком уверен в том, как реализовать это в своем проекте, поскольку я довольно новичок в использовании WPF и после структуры MVVM. Будет ли это связано с созданием события фильтра в коде для представления?
Ниже перечислены фрагменты моего кода, которые, я думаю, были бы полезны при понимании моего вопроса. Любая помощь в решении этого вопроса будет очень оценена.
Посмотреть
<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}" />
ViewModel
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");
}
}
CustomObjectClass
public class CustomObjectClass
{
public string propertyOne { get; set; }
public string propertyTwo { get; set; }
}
Убедившись я получил ваш вопрос - вы хотите второй 'ListBox' показать propertyTwo? –
Думаете, вам нужно перефразировать вопрос. Возможно, даже добавив пример с желаемым выходом. –
№. В списках по-прежнему отображается свойствоOne, но это свойствоTwo, которое решает, к какому «ListBox» он идет. , например. если пользовательский объект имеет строку «read», установленную как «свойствоTwo», этот объект (с его именем propertyOne, отображаемым в «ListBox»), отправляется в «ListBoxTwo». – sunnysesh