1

我有一个提供项目集合的 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 匹配,但它不起作用。我认为这与我尝试在 DataTrigger.Value 中使用绑定有关——我还没有看到任何其他示例。

有什么想法可以让我完成这项工作吗?

谢谢,

丹尼尔

4

1 回答 1

3

既然您使用的是 MVVM,为什么不让视图模型公开一个属性来告诉视图它是否处于活动状态?这将使该逻辑脱离您的视图并进入您的虚拟机。

于 2010-01-26T14:33:26.587 回答