提问人:CloudFrugality 提问时间:11/13/2023 更新时间:11/13/2023 访问量:46
WINUI 3 Datagrid,IsReadOnly 按行设置?
WINUI 3 Datagrid, IsReadOnly setting by row?
问:
我在 WINUI 3 应用程序中使用社区工具包数据网格。我可以设置列的“IsReadOnly”属性,并使该列不可编辑。但我想做的是将整个数据网格设置为只读,然后用户选择一行,单击编辑按钮,只有该行是可编辑的。据我所知,这是不可能的。或者我是个白痴。两者都是可能的。
我似乎找不到任何在线材料说这是可能的。列 readonly 确定,但不是行。
答:
0赞
Andrew KeepCoding
11/13/2023
#1
一种方法是创建一个只读标志:
人员.cs
public partial class Person : ObservableObject
{
[ObservableProperty]
private int _id;
[ObservableProperty]
private string? _name;
[ObservableProperty]
private bool _isReadOnly;
}
MainPageViewModel.cs
public partial class MainPageViewModel : ObservableObject
{
[ObservableProperty]
private ObservableCollection<Person> _people = new()
{
new Person { Id = 1, Name = "Michael", IsReadOnly = true },
new Person { Id = 2, Name = "Jim", IsReadOnly = true },
new Person { Id = 3, Name = "Pam", IsReadOnly = true },
new Person { Id = 4, Name = "Dwight", IsReadOnly = true },
};
然后,您可以:
MainPage.xaml.cs
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public MainPageViewModel ViewModel { get; } = new();
}
MainPage.xaml
<toolkit:DataGrid
AutoGenerateColumns="False"
ItemsSource="{x:Bind ViewModel.People, Mode=OneWay}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn
Binding="{Binding Id}"
Header="ID"
IsReadOnly="True" />
<toolkit:DataGridTemplateColumn Header="Name">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:Person">
<TextBox
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
CornerRadius="0"
IsReadOnly="{x:Bind IsReadOnly, Mode=OneWay}"
Text="{x:Bind Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
<toolkit:DataGridTemplateColumn Header="Read only">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:Person">
<CheckBox IsChecked="{x:Bind IsReadOnly, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
注意:我正在使用 CommunityToolkit.Mvvm NuGet 包。
评论