如何在WinUI3数据网格中执行行更新



我是WinUI的新手,正在为我的WinUI3应用程序使用CommunityToolkit.WinUI.UI.Controls。我在哪里使用Datagrid。其中一列生成如下:

<controls:DataGridTextColumn Binding="{Binding MessageId}" Header="Id" />

我还为网格中的操作生成了一个按钮列,如下所示:

<controls:DataGridTemplateColumn Header="Action">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="SendAsync" CommandParameter="{Binding Path=MessageId}">Send</Button>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
</controls:DataGrid.Columns>

我的问题是这个按钮应该仅基于列"可见;状态";来源。在网上搜索后,我找不到任何解决方案。我曾经在WinForm应用程序上使用row_update,在那里我们可以使用基于任何单元格值的条件可见性。

请向我建议如何在WinUI3中克服条件可见性/Row_update类功能的此类问题。

您可以创建Converter并像这样控制ButtonVisibility属性。

BoolToVisibilityConverter.cs

public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return ((bool)value) is true
? Visibility.Visible
: Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language) => throw new NotImplementedException();
}

您的DataGrid

<Page.Resources>
<helpers:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Page.Resources>
<controls:DataGridTemplateColumn Header="Action">                    
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
Click="SendAsync"
CommandParameter="{Binding Path=MessageId}"
Visibility="{Binding Status, Converter={StaticResource BoolToVisibilityConverter}}"/>>
Send
</Button>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>