View Model を持つ ListView があります。ItemsSource は、View Model 内のオブジェクトのコレクションです。View Model には、IsFlagOn フラグのプロパティが存在します。ListViewItem が IsMouseOver を検出したときに、View Model でそのプロパティを True に設定したいと考えています。次に、他の UI 要素がこの同じプロパティにバインドされるため、MouseOver が切り替えられるとビューが変化します。
XAML でこれを達成するにはどうすればよいですか?
私はこのようなものを想像します(しかし、これは壊れます):
<Style> <!-- on the ListViewItem -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="DataContext.IsFlagOn" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
アップデート:
エラーは
スタイル プロパティ 'IsFlagOn' を解決できません。所有する型がスタイルの TargetType であることを確認するか、Class.Property 構文を使用してプロパティを指定します。
更新 (2):
これは、既存の XAML をもう少し詳しく示したものです (以下)。ListView が VM のプロパティにバインドされていることがわかりますAllItems
。リスト内の各項目は VM であり、各列がバインドされていることに注意してください。では、ItemContainerStyle は ListView VM または Item VM に対してバインドされていますか?
<ListView Itemssource="{Binding AllItems}">
<ListView.ItemContainerStyle>
<Style> <!-- on the ListViewItem -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="DataContext.IsFlagOn" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<!-- ... -->
</GridView>
</ListView.View>
</ListView>