【问题标题】:Icon/Button That changes based on boolean binding value in MVVM根据 MVVM 中的布尔绑定值更改的图标/按钮
【发布时间】:2019-10-23 08:36:13
【问题描述】:

我的 XAML 已经走到了这一步,我想知道我在图标/按钮方面是否采用了正确的方法来在数据网格中显示数据。我正在使用 Material Design。

我在视图模型中有一个名为“IsLocked”的布尔属性。我想要一个列中的图标,该图标将根据值更改为锁定或解锁图标,并且我希望能够单击锁定以更改值。我错过了按钮/单击事件。我试图将它保存在 XAML 中。

奖励将是一些关于鼠标悬停的 UI 反馈,让用户知道他们可以点击它。我怎样才能将它也纳入其中?

这是正确的方法吗?如何将其变成可点击的东西?

    <DataGridTemplateColumn Width="Auto" Header="Is Locked">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <materialDesign:PackIcon x:Name="LockIcon" Kind="LockOpenOutline" Foreground="Green"/>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding isLocked}" Value="True">
                        <Setter Property="Kind" Value="Lock" TargetName="LockIcon"/>
                        <Setter Property="Foreground" Value="Red" TargetName="LockIcon"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

【问题讨论】:

  • 您可以使用 ToggleButton,它使用触发器根据 IsChecked 的值交换模板中的图标。或者只是将图标放在其内容中并与您拥有的触发器交换。您将 IsLocked 绑定到 ToggleButton 的 IsChecked 属性。这是执行此操作的规范方法。如果需要,我可以提供一个示例,但我敢打赌,您可以轻松找到一些示例。

标签: wpf xaml mvvm data-binding datagrid


【解决方案1】:

您可以创建一个转换器,该转换器将返回 PackIconKind 并使用转换器将 isLocked 属性绑定到 PackIcon。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2018-01-15
    • 2017-10-10
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多