Проблема с ItemTemplate TextBlock

Я пытаюсь создать шаблон элемента, в котором часть поля на панели стека может быть пустой. Когда он пуст, я бы хотел, чтобы видимость рухнула. Я попытался поставить триггеры, но это не сработало, и я не очень знаком с этой частью WPF

Кроме того, я хотел бы изменить цвет фона этого элемента, когда определенное значение в моей привязке истинно. Это то же самое?

Благодарю.

2 ответа

Решение

Использование ViewModel является одним из подходов к решению такого рода проблем.

Если ваши данные были сохранены в классе Item, вы должны создать ItemViewModel, чтобы обернуть Item для отображения в вашем элементе управления. Класс ViewModel будет реализовывать INotifyProperty, измененный для обновления отображения, и установщики будут вызывать событие PropertyChanged, передавая соответствующее имя свойства. Вы также можете вызывать события измененных свойств для столько взаимосвязанных измененных полей, сколько необходимо.

Предположим, что вы хотите, чтобы Item.Description отображался в свернутом поле, когда описание пусто. Ваши свойства ViewModel могут выглядеть так

public string Description
{
    get { return mItem.Description; }
    set { mItem.Description = value; Notify("Description"); Notify("DescriptionVisibility"); }
}

public Visibility DescriptionVisibility
{
    get { return string.IsNullOrEmpty(mItem.Description) ? Visibility.Visible : Visibility.Collapsed; }
}

В XAML свяжите текстовое свойство с Description, а свойство Visibility с DescriptionVisibility.

Если вы хотите скрыть элемент, если его содержимое равно нулю, вы должны переопределить ControlTemplate его ListBoxItem (или же ListViewItem или что-то еще в зависимости от того, какой контейнер элемента вы используете) и использовать триггеры, которые нацелены на DataContext, лайк:

<DataTrigger Binding="{Binding}" Value="{x:Null}">
  <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

Тем не менее, я бы предложил вам использовать Filter делегировать на ваш CollectionView чтобы исключить ваши пустые элементы из вашего просмотра напрямую, чтобы избежать свертывания неиспользуемых элементов.

Например, чтобы исключить нулевые объекты, в вашем коде позади используйте:

CollectionViewSource.GetDefaultView(yourCollection).Filter = o => o != null;
Другие вопросы по тегам