WPF Выделите пункт - PullRequest
       34

WPF Выделите пункт

1 голос
/ 26 января 2010

У меня есть ViewModel, которая предоставляет коллекцию предметов. Существует также свойство ActiveItem. Коллекция Items может содержать или не содержать ActiveItem.

То, что я хочу сделать (в XAML), это отобразить элементы в виде списка и выделить любые элементы, равные активному элементу.

Я пробовал следующее безуспешно:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border x:Name="outerBorder" Background="Green">
                <TextBlock Text="{Binding ItemId}" />
            </Border>
            <DataTemplate.Triggers>
                <DataTrigger 
                    Binding="{Binding      
                        Path=DataContext.Item.ItemId,      
                        RelativeSource={RelativeSource TemplatedParent},     
                        Mode=Default}"
                    Value="{Binding      
                        Path=DataContext.ActiveItem.ItemId,      
                        RelativeSource={RelativeSource AncestorType=Window},     
                        Mode=Default}"
                >
                    <Setter TargetName="outerBorder" 
                        Property="Background" Value="Orange" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Как вы можете видеть, я пытался использовать DataTrigger для сопоставления текущего элемента с ActiveItem, но он не работает. Я думаю, что это как-то связано с моей попыткой использовать Binding в DataTrigger.Value, чего я не видел в других примерах.

Любые идеи, как я мог бы сделать эту работу?

Спасибо

Daniel

1 Ответ

3 голосов
/ 26 января 2010

Поскольку вы используете MVVM, почему бы просто не показать модели представления свойство, сообщающее представлению, является ли оно активным или нет? Это выведет эту логику из вашего поля зрения на вашу виртуальную машину.

...