You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让WPF DataGrid中ObservableCollection绑定的指定列设为只读?

解决方案

不需要使用ReadOnlyObservableCollection,有几种更简单的方式实现特定列只读的需求:

方法一:手动定义DataGrid列并设置只读

直接在XAML中明确定义所有列,给需要只读的列设置IsReadOnly="True":

<DataGrid Name="OptionsGrid" ItemsSource="{Binding Options}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding Id}" IsReadOnly="True"/>
        <DataGridCheckBoxColumn Header="是否激活" Binding="{Binding IsActive}"/>
        <DataGridCheckBoxColumn Header="选项勾选" Binding="{Binding OptionCheck}"/>
        <DataGridTextColumn Header="选项名称" Binding="{Binding OptionName}"/>
    </DataGrid.Columns>
</DataGrid>

这里关闭了自动生成列(AutoGenerateColumns="False"),手动配置每一列,其中ID列通过IsReadOnly="True"设置为只读,其他列保持可编辑。

方法二:利用自动生成列事件处理

如果希望保留自动生成列的特性,不想手动写所有列,可以通过DataGridAutoGeneratingColumn事件来动态设置列的只读属性:

第一步:在XAML中添加事件绑定

<DataGrid Name="OptionsGrid" ItemsSource="{Binding Options}" AutoGeneratingColumn="OptionsGrid_AutoGeneratingColumn"/>

第二步:在后台代码中实现事件逻辑

private void OptionsGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    // 判断当前生成的列是否是Id列
    if (e.PropertyName == nameof(OptionsData.Id))
    {
        e.Column.IsReadOnly = true;
    }
}

这样DataGrid自动生成列时,会自动把Id列设为只读,其他列保持默认的可编辑状态。

方法三:从数据模型层面限制只读

把OptionsData中的Id属性改为仅可读(去掉setter),这样从数据源头就限制了修改:

public class OptionsData
{
    // 仅保留getter,初始化时赋值
    public string Id { get; }
    public bool IsActive { get; set; }
    public bool OptionCheck { get; set; }
    public string OptionName { get; set; }

    // 新增构造函数,用于初始化Id
    public OptionsData(string id)
    {
        Id = id;
    }
}

初始化集合时需要用构造函数赋值:

Options = new ObservableCollection<OptionsData>
{
    new OptionsData("123") { IsActive = true, OptionCheck = true, OptionName = "Name"},
    new OptionsData("456") { IsActive = false, OptionCheck = false, OptionName = "Name2"},
};

这种方式下,即使DataGrid允许编辑,也无法修改Id属性,因为模型本身不提供设置的入口。

内容的提问来源于stack exchange,提问作者ChrisRun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:55:26