如何从ViewModel更改数据网格中的VisualState

本文关键字:网格 数据网 VisualState 数据 ViewModel | 更新日期: 2023-09-27 18:22:19

我的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制作了一个用户控件,该控件将state作为依赖属性,并在代码后面对该属性的更改进行可视化状态处理:(

如何从ViewModel更改数据网格中的VisualState

我创建了一个用户控件,该控件的样式中有visualstategroups,并向该控件添加了一个依赖属性,该依赖属性的更改更改了代码背后的视觉状态。