Страницы

Поиск по вопросам

среда, 29 января 2020 г.

MVVM WPF смена DataTemplate если список пуст

#c_sharp #wpf #mvvm


есть ListBox




в нем из базы загружаются автомобили.
как сделать чтобы если база пуста(удалены все элементы или еще не заполнялась) ListBox
заменялся на это



    


Ответы

Ответ 1



Можно сделать с помощью DataTrigger без дополнительных свойств и конверторов: ListBox и Label должны находится в одном Grid(или хотя бы в одной ячейке) чтобы происходило наложение друг на друга.

Ответ 2



Сначала напишем конвертер, который является отражением BooleanToVisibilityConverter: public class InverseBooleanToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? Visibility.Collapsed : Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } После этого дополним модель представления признаком наличия автомобилей: class ViewModel { ... public bool HasAuto { get { return Auto.Any(); } } } После этого добавим обработку видимости в представление: Остается только вовремя обновлять свойство HasAuto путем вызова PropertyChanged. Это можно сделать подписавшись на событие изменения коллекции Auto. Или можно вызывать событие PropertyChanged при загрузке, добавлении и удалении элементов из коллекции. Тогда подписка на событие изменения состава коллекции не понадобится. UPD Ну или можно воспользоваться триггерами (свойство HasAuto все равно понадобится)

Ответ 3



1. Объявите: public ObservableCollection Auto 2. В разметке: 3. Аналогично Auto (только поменять Hidden/Visible)

Комментариев нет:

Отправить комментарий