#c# #wpf #listview #row #height
Вопрос:
У меня есть такая модель:
class MyImage
{
public string imagePath {get; set;}
public bool isIncluded {get; set;}
}
и список для хранения этих моделей:
public List<MyImage> myImages {get; set;}
Теперь я знаю, как привязать весь этот список к ListView
, но я хочу, чтобы ListView
отображались только изображения тех моделей, в которых свойство «Включено» имеет значение true.
Мое текущее решение состоит в том, чтобы иметь другое List<MyImages>
, в котором я копирую только те, которые включены, но мне было интересно, есть ли какое-либо лучшее решение.
Комментарии:
1. Вы ищете
ListCollectionView
фильтры и фильтры.
Ответ №1:
Вы можете просто скрыть элементы, которые должны быть исключены ListView
в представлении, определив ItemContainerStyle
с помощью DataTrigger
:
<ListView ...>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding isIncluded}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Ответ №2:
Используйте представление коллекции и примените фильтр…очень просто
public ICollectionView SupportedDevices
{
get
{
if (Data != null)
{
return CollectionViewSource.GetDefaultView(Data);
}
else
return null;
}
}
private string _searchedText = string.Empty;
public string SearchedText
{
get { return _searchedText; }
set
{
_searchedText = value;
SupportedDevices.Filter = delegate(object obj)
{
if (string.IsNullOrEmpty(_searchedText))
return true;
DeviceInfo data = obj as DeviceInfo;
if (data == null)
return false;
return (
(data.Manufacturer.IndexOf(_searchedText, 0, StringComparison.InvariantCultureIgnoreCase) > -1) ||
data.Model.IndexOf(_searchedText, 0, StringComparison.InvariantCultureIgnoreCase) > -1
);
};
}
}
Ответ №3:
Я не думаю, что вы можете избежать еще одного списка. Более элегантным решением может быть запрос LINQ на свойство:
public List<MyImage> MyImages => myImages.Where(i => i.IsIncluded).ToList();
Другим более сложным подходом может быть CollectionViewSource.