我在我的 ViewModel 中有一个集合,每个项目都有特定的状态,并且基于它我想显示特定的控件,当状态发生变化时我想为过渡应用动画。
我使用 DataGrid 来显示视图中的项目,其中一列应该显示项目的状态。
我所做的是我用 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 创建了一个用户控件,其状态为依赖属性,并在后面的代码中更改该属性时显示了视觉状态状态:(