ViewModel にコレクションがあり、各アイテムは特定の状態を取得し、それに基づいて特定のコントロールを表示し、状態が変化したときに遷移にアニメーションを適用したいと考えています。
ビューに項目を表示するために DataGrid を使用します。その 1 つの列に項目の状態を表示する必要があります。
私がしたことは、VisualState グループを使用してスタイルを定義したことです (これは、別のコントロールで if を使用すると問題なく動作しますが、コード ビハインドで GotoState を記述する必要があります)。
そして、データグリッドで以下を使用します。
<DataGrid ItemsSource="{Binding DataItems}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Item state">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton DataContext="{Binding Item}"
x:Name="btnState"
Style="{StaticResource MyVisualStateStyle}">
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding ItemState}" Value="State1">
<ei:GoToStateAction StateName="State1"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding ItemState}" Value="State2">
<ei:ChangePropertyAction PropertyName="Background" Value="#FF000000" TargetName="btnState" />
<ei:GoToStateAction StateName="State2"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding ItemState}" Value="State3">
<ei:ChangePropertyAction PropertyName="Background" Value="#FFFFFFFF" TargetName="btnState" />
<ei:GoToStateAction StateName="State2"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
backgroupd が機能することを確認するために変更を追加しましたが、それも機能しません。バインディング エラーがないか出力を確認しましたが、バインディング エラーはありません。
これは正しい実装方法ですか?
助言がありますか?
編集済み
依存関係プロパティとして状態を持つ ToggleButton のユーザー コントロールを作成し、コード ビハインドでそのプロパティの変更時に視覚的な状態状態を実行しました :(