CanUserAddRows New Row未在DataGrid中保存

时间:2015-11-20 15:40:52

标签: c# .net wpf

创建DataGrid并设置CanUserAddRows="True"

有一个按钮可以保存cs文件中的更新:

private void Save_Click(object sender, RoutedEventArgs e)
{
    UnitService unitService = new UnitService();

    unitService.SaveUpdates(valuationCase);

    MainWindow mainWin = new MainWindow();
    mainWin.Show();
    this.Close();
}

窗口上的textbox内还有一个datagrid可编辑,这可以通过保存点击按钮正确保存编辑内容。只是新的行不是。

任何想法??

datagrid定义:

    <DataGrid Name="dgCommentsList" AutoGenerateColumns="False" Margin="10,196,9.953,38.204" CanUserAddRows="True" FontSize="18">
        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="DataGridColumnHeader">
                <Setter Property="FontSize" Value="20" />
                <Setter Property="FontWeight" Value="bold" />
            </Style>
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Type" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox x:Name="Type" Text="{Binding Type}" >
                            <TextBox.Style>
                                <Style TargetType="TextBox">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsReadOnly}" Value="False">
                                            <Setter Property="TextBox.IsReadOnly" Value="False"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding IsReadOnly}" Value="True">
                                            <Setter Property="TextBox.IsReadOnly" Value="True"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>
                        </TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

    </DataGrid>

2 个答案:

答案 0 :(得分:0)

您应该使用thisArg

在行上提交修改

编辑:在诊断问题之后

您需要在DataContext类上实现INotifyPropertyChanged(即:Viewmodel),如下所示:

dataGrid.CommitEdit()

或者从DependencyObject扩展并使用依赖属性,如下所示:

 public class ViewModel: INotifyPropertyChanged
 {
            private string _type;
            public string Type 
            {
                get { return _type; } 
                set 
                {
                    _type = value;
                    OnPropertyChanged("Type");
                }
            }

            public event PropertyChangedEventHandler PropertyChanged;
            protected virtual void OnPropertyChanged(string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
}

希望它有所帮助;)

答案 1 :(得分:0)

我认为你需要设置绑定模式才能写回底层对象。我注意到你的DataGrid没有ItemsSource。我猜是因为这只是你遗漏的片段。

default_bar