Wpf DataGrid添加新行

Man*_*kar 26 c# wpf datagrid mvvm

我已设法DataGrid显示添加新项目的新行.我现在面临的问题是我希望wpf的其余部分中的数据DataGrid只读,并且只能编辑新行.

目前这是我的DataGrid样子.

<DataGrid AutoGenerateColumns="False" Name="DataGridTest" CanUserAddRows="True" Grid.Row="2" ItemsSource="{Binding TestBinding}" >
    <DataGrid.Columns>        
        <DataGridTextColumn Header="Line" IsReadOnly="True" Binding="{Binding Path=Test1}" Width="50"></DataGridTextColumn>
        <DataGridTextColumn Header="Account" IsReadOnly="True"  Binding="{Binding Path=Test2}" Width="130"></DataGridTextColumn>               
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

但由于我只保留了列的只读,因此新行也会添加为只读,这是我不想要的.

小智 37

试试这个MSDN博客

另外,请尝试以下示例:

XAML:

   <DataGrid AutoGenerateColumns="False" Name="DataGridTest" CanUserAddRows="True" ItemsSource="{Binding TestBinding}" Margin="0,50,0,0" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Line" IsReadOnly="True" Binding="{Binding Path=Test1}" Width="50"></DataGridTextColumn>
            <DataGridTextColumn Header="Account" IsReadOnly="True"  Binding="{Binding Path=Test2}" Width="130"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    <Button Content="Add new row" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
Run Code Online (Sandbox Code Playgroud)

CS:

 /// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var data = new Test { Test1 = "Test1", Test2 = "Test2" };

        DataGridTest.Items.Add(data);
    }
}

public class Test
{
    public string Test1 { get; set; }
    public string Test2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 至少在这个简单的示例中,您可以稍微简化一下,而根本不声明 Test 类。匿名类型:`DataGridTest.Items.Add(new { Test1 = "Test1", Test2 = "Test2" });` (4认同)

Kyl*_*Ren 12

只需使用以下Style方法DataGridRow:

<DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource Self},Path=IsNewItem,Mode=OneWay}" />
        </Style>
</DataGrid.RowStyle>
Run Code Online (Sandbox Code Playgroud)