Проблема с 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;