WPF. Как заставить listitem перерисовать себя? - PullRequest
0 голосов
/ 16 февраля 2010

У меня есть ListBox, который содержит объекты, описывающие человека. Эти объекты заполнены только частично и полностью заполнены (дорогостоящая операция) при нажатии на элемент. Я хочу изменить стиль тех объектов, которые еще не были заполнены, чтобы частично заполненные элементы отображались курсивом.

Я сделал ItemTemplate:

<ListBox.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding}" Style="{StaticResource PersonWithData}"/>
    </DataTemplate>
</ListBox.ItemTemplate>

и определил Style:

    <Style x:Key="PersonWithData" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding HasData}" Value="True">
                <Setter Property="FontStyle" Value="Normal"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding HasData}" Value="False">
                <Setter Property="FontStyle" Value="Italic"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

Это на самом деле работает. Проблема, которую я имею, состоит в том, чтобы заставить стиль обновляться при нажатии на элемент. Объект заполняется и затем должен изменить стиль с курсива на обычный.

Что я могу сделать, чтобы заставить ListItem или ListBox перерисовать себя и обновить стили? Или я должен использовать какое-то уведомление при изменении свойства HasData?

1 Ответ

2 голосов
/ 16 февраля 2010

Вы должны убедиться, что вы реализуете интерфейс INotifyPropertyChanged в своем классе Person и генерируете событие change с параметром "HasData" каждый раз, когда изменяется свойство HasData. Хорошее место для этого в сеттере собственности. Это ключ к обновлению связанных компонентов WPF.

...