У меня есть коллекция из нескольких тысяч элементов, и я хочу отобразить только их подмножество. Есть ли способ привязать коллекцию к представлению таким образом, что только определенные элементы, например. отображаются те, у которых есть свойство «Показать == истина»? Если это так, будет ли он создавать тысячи элементов пользовательского интерфейса? Или мне нужно создать новый список отображаемых элементов?Частично привязка к списку
0
A
ответ
1
Проверить CollectionViewSource Class и CollectionViewSource.Filter Event
View (частичный пример):
<Grid>
<Grid.DataContext>
<wpfCalc:StudentList/>
</Grid.DataContext>
<Grid.Resources>
<CollectionViewSource
Source="{Binding Students,Mode=OneWay}" x:Key="StudentsCollViewSource"
Filter="StudentsCollViewSource_OnFilter"/>
</Grid.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource StudentsCollViewSource}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name,Mode=OneTime}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
И код позади реализации фильтра:
private void StudentsCollViewSource_OnFilter(object sender, FilterEventArgs e)
{
var s = e.Item as Student;
e.Accepted = s != null && !string.IsNullOrWhiteSpace(s.Name);
}
1
Существует два метода. Первый заключается в использовании конвертера.
<Window.Resources>
<local:BoolToVisibilityConverter x:Key="converter"/>
</Window.Resources>
<StackPanel>
<ListView x:Name="listView" ItemsSource="{Binding List}">
<ListView.ItemTemplate>
<DataTemplate >
<TextBlock Text="{Binding Name}" Visibility="{Binding IsActive, Converter={StaticResource converter}}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
// Код За
public class BoolToVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return false; // not needed
}
#endregion
}
Второй метод заключается в использовании Linq
List<MyData> list
{
get
{
if(list!=null)
return list.where(p => p.IsActive == true);
return null;
}
set
{
if(list!=value)
list = value;
}
}
Смежные вопросы
- 1. привязка функции к списку
- 2. Привязка к списку
- 3. Привязка DataSet к списку
- 4. RadGrid Привязка к списку
- 5. привязка к списку кортежей
- 6. Привязка SelectedItems Autocompletebox к списку
- 7. привязка данных к гетерогенному списку
- 8. Привязка модели к вложенному списку
- 9. WPF - привязка Teeview к списку
- 10. Привязка данных к списку флажков
- 11. Привязка к списку без ObservableCollection
- 12. Сложная привязка модели к списку
- 13. WPF привязка к связанному списку
- 14. Привязка к списку с Lightswtich
- 15. Привязка DataGridView к списку объектов
- 16. Data Grid View - привязка столбцов к списку
- 17. ModelBinder Неправильно привязка к списку при отправке
- 18. Привязка к списку групп в сгруппированных коллекции
- 19. Как работает привязка модели к избранному списку?
- 20. WPF: привязка к списку внутри класса
- 21. привязка wpf в C# к отфильтрованному списку
- 22. Привязка к списку в коллекции WPF/VB
- 23. WPF привязка к списку свойств не обновляется
- 24. привязка DataGrid к списку <int?>
- 25. C# WPF привязка коллекции к списку
- 26. привязка DataGridView к списку различных объектов? C#
- 27. MVC4 Knockoutjs привязка к списку <>
- 28. C# combobox привязка к списку объектов
- 29. привязка элемента списка ListBox WPF к списку
- 30. Привязка общего списка к списку в wpf
вместо привязки к коллекции создания [ 'ListCollectionView'] (https://msdn.microsoft.com/en-us/library/system.windows.data. listcollectionview (v = vs.110) .aspx), установите 'Filter' и привяжите к этому – dkozl