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>

ご覧のとおり、現在のアイテムを ActiveItem と一致させるために DataTrigger を使用しようとしましたが、うまくいきません。これは、DataTrigger.Value で Binding を使用しようとしていることに関係していると思います。他の例は見たことがありません。

これを機能させる方法はありますか?

ありがとう、

ダニエル

4

1 に答える 1

3

MVVM を使用しているので、ビュー モデルがアクティブかどうかをビューに伝えるプロパティを公開しないのはなぜですか? これにより、そのロジックがビューから VM に取り込まれます。

于 2010-01-26T14:33:26.587 に答える