2

を使用していくつかの要素をレンダリングし、ItemsControlそのうちの 1 つを強調表示したい

私のビューモデル:

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

私のXAML:

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

background プロパティを特定のものに設定してアイテムを強調表示したいのですが、どうすればよいですか?

4

1 に答える 1

2

まず、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、コンバーターが true を返す場合は、-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>

resourcexaml ファイルにコンバーターを として追加してください。

于 2013-03-27T17:03:43.843 に答える