Проблема с ItemTemplate TextBlock - PullRequest
0 голосов
/ 10 октября 2009

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

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 октября 2009

Использование 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.

0 голосов
/ 10 октября 2009

Если вы хотите скрыть элемент, если его содержимое равно нулю, вы должны переопределить 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;
...