wpf 如何使只读数据网格中的一列可编辑?

dfty9e19  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(271)

如何使只读数据网格中的一列可编辑?

<DataGrid x:Name="dgLoadDtl" Height="315" Width="710" Grid.Row="0" 
                  HorizontalAlignment="Left" VerticalAlignment="Bottom"  
                  Style="{DynamicResource StyleDatagrid}" 
                  IsReadOnly="true">

            <DataGrid.Columns>                    

                <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" />                    
                <DataGridTextColumn Foreground="Black" Width="140" Header="CustName"  Binding="{Binding CustName, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="140" Header="Address"  Binding="{Binding Address1, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk   or Bag"  Binding="{Binding BulkorBag, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" />
                <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" />
nbnkbykc

nbnkbykc1#

我创建了一个示例,其中将DataGrid的ItemsSource绑定到ObservableCollection,从这里您有两个选项。
1.在数据网格上设置AutoGenerateColumns=“False”,并为所有列设置IsReadOnly=“True”,但不包括希望可编辑的列,您将设置IsReadOnly=“False”。

  1. AutoGenerateColumns=“True”(这是默认值,因此您可以从XAML中删除该属性),并在ViewModel中为所有属性(希望可编辑的列除外)设置为私有。
    下面是选项1的示例代码:
<DataGrid x:Name="dgLoadDtl" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding MyData}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Foreground="Black" Width="60" Header="Sctn" Binding="{Binding Sctn, Mode=TwoWay}" IsReadOnly="false" />
        <DataGridTextColumn Foreground="Black" Width="140" Header="CustName"  Binding="{Binding CustName, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="140" Header="Address"  Binding="{Binding Address1, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="50" Header="Bulk   or Bag"  Binding="{Binding BulkorBag, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="80" Header="ProdCode" Binding="{Binding ProdCode, Mode=TwoWay}" IsReadOnly="True"/>
        <DataGridTextColumn Foreground="Black" Width="80" Header="MedCode" Binding="{Binding MedCode, Mode=TwoWay}" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
r1wp621o

r1wp621o2#

DataGrid绑定到一个只读视图(一种用IEnumerable生成的视图)时,您不能将其属性IsReadOnly设置为"false",因为WPF不喜欢这样做,而且您必须使用其他方法,例如将可编辑列转换为DataGridTemplateColumn
例如,如果您有一个复选框样式的列,如下所示

<DataGridCheckBoxColumn Binding="{Binding IsSelected}"/>

要使其可编辑/可更改,您可以将其替换为如下内容

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
       <DataTemplate>
           <CheckBox IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"/>
       </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

作为此列的附加功能,您将获得一键更改行为(ref

相关问题