2010-01-26 161 views
1

我有一个ViewModel,提供项目的集合。还有一个ActiveItem propery。 Items集合可能包含或不包含ActiveItem。WPF突出显示项目

我想要做的(在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中的绑定有关 - 我还没有看到任何其他示例。

任何想法,我可能会使这项工作?

感谢,

丹尼尔

回答

3

由于您使用的MVVM,为什么不只是有视图模型公开属性告诉视图无论是主动或不?这会让你从逻辑上看到你的虚拟机。

+0

因此,而不是直接暴露项目(模型对象),我应该创建一个ItemViewModel并暴露?我会不情愿直接添加一个IsActive属性到我的Item模型对象。 – djskinner 2010-01-26 15:18:13