2

我想使用 渲染几个元素ItemsControl,并突出显示其中一个

我的视图模型:

public class ViewModel
{
    public List<Item> Items;
    public Item HighlightedItem;
}

我的 XAML:

<ItemsControl ItemsSource="{Binding Items}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <myUserControl Background="{?}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我想通过将背景属性设置为特定的东西来突出显示该项目,我应该怎么做?

4

1 回答 1

2

首先有一个转换器,它将比较两个对象的引用说ObjectEqualsConverter

public class ObjectEqualsConverter : IMultiValueConverter
{
    #region IMultiValueConverter        

    public object Convert(object[] values, Type targetType, object parameter,
                          CultureInfo culture)
    {
        return values[0] == values[1];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, 
                                CultureInfo culture)
    {
        throw new NotImplementedException();
    } 
    #endregion
}

XAML文件中,使用转换器检查转换器是否current item is same as highlighted item in ViewModel返回真设置color控制使用trigger-

   <ItemsControl ItemsSource="{Binding Items}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <myUserControl x:Name="myControl" />
                <DataTemplate.Triggers>
                    <DataTrigger Value="True">
                        <DataTrigger.Binding>
                            <MultiBinding Converter="{StaticResource ObjectEqualsConverter}">
                                <Binding/>
                                <Binding Path="DataContext.HighlightedItem" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ItemsControl}"/>
                            </MultiBinding>
                        </DataTrigger.Binding>
                        <Setter TargetName="myControl" Property="Background" Value="Red"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

确保resource在 xaml 文件中添加转换器。

于 2013-03-27T17:03:43.843 回答