Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在datagrid中编辑和保存数据_C#_Wpf_Datagrid - Fatal编程技术网

C# 在datagrid中编辑和保存数据

C# 在datagrid中编辑和保存数据,c#,wpf,datagrid,C#,Wpf,Datagrid,我正在WPF应用程序中使用datagrid。下面是我的XAML代码 <DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridT

我正在WPF应用程序中使用datagrid。下面是我的XAML代码

<DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Title" Width="60" Binding="{Binding title}" />
            <DataGridTextColumn Header="Artist" Width="*" Binding="{Binding artist}"/>
            <DataGridTextColumn Header="Value" Width="*" Binding="{Binding number}"/>
            <DataGridCheckBoxColumn Header="test" Width="*" Binding="{Binding test}"/>
        </DataGrid.Columns>
    </DataGrid>

下面是我的C代码

公共部分类主窗口:窗口
{
公共ObservableCollection数据=新ObservableCollection();
公共主窗口()
{
初始化组件();
添加(新曲目(){title=“Think”,artist=“Aretha Franklin”,number=7,test=true});
添加(新曲目(){title=“Minnie The Moocher”,artist=“Cab Calloway”,number=9,test=true});
添加(新曲目(){title=“摇动尾羽”,artist=“Ray Charles”,number=4,test=true});
dgTest.ItemsSource=数据;
}
}
公共类轨道
{
私有字符串(private String);
私有字符串_a;
私人国际;
私人布尔(fg);
公共字符串标题
{
获取{return\u t;}
设置{u t=value;}
}
公共弦乐艺术家
{
获取{return\u a;}
设置{u a=value;}
}
公共整数
{
获取{return\n;}
设置{u n=value;}
}
公共布尔测试
{
获取{return\u fg;}
设置{u fg=value;}
}
}

启动应用程序时会导入数据,但如果我在任何单元格中进行更改,则不会提交更改,因为当我尝试从datagrid读取数据时,它仍然显示旧数据。当用户更改datagrid中的字段时,我如何提交更改?

在类轨道上实现INotifyPropertyChanged。那样

public class Track : INotifyPropertyChanged 
{
     public string title
     {
         get{return _t;}
         set
            {
                 _t = value;
                 OnPropertyChanged("title");
            }
     }
     public event PropertyChangedEventHandler PropertyChanged;
     public void OnPropertyChanged(string strCaller = null)
     {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strCaller));
     }
}
在XAML代码中,您可以稍微修改一下:

Binding="{Binding title, Mode="TwoWay", UpdateSourceTrigger="PropertyChanged"}

将绑定的
UpdateSourceTrigger
属性设置为
PropertyChanged

<DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Width="60" Binding="{Binding title, UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Header="Artist" Width="*" Binding="{Binding artist, UpdateSourceTrigger=PropertyChanged}"/>
        <DataGridTextColumn Header="Value" Width="*" Binding="{Binding number, UpdateSourceTrigger=PropertyChanged}"/>
        <DataGridCheckBoxColumn Header="test" Width="*" Binding="{Binding test, UpdateSourceTrigger=PropertyChanged}"/>
    </DataGrid.Columns>
</DataGrid>


这将导致立即设置源属性。

在类轨道上实现INotifyPropertyChanged。看见检查这篇文章,它可以帮助第1个链接解决我的问题,但只有当我点击下一行或任何其他行时,如果我没有选择提交其他行更改,更改才会提交。是否有任何方法可以改变这种行为?请检查此项。这个线程也解决了我的问题,但只有当我点击下一行或任何其他行时,如果我没有选择提交其他行更改,更改才会提交。有什么办法可以改变这种行为吗?
<DataGrid x:Name="dgTest" HorizontalAlignment="Left" Height="296" Margin="184,115,0,0" VerticalAlignment="Top" Width="599" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Width="60" Binding="{Binding title, UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn Header="Artist" Width="*" Binding="{Binding artist, UpdateSourceTrigger=PropertyChanged}"/>
        <DataGridTextColumn Header="Value" Width="*" Binding="{Binding number, UpdateSourceTrigger=PropertyChanged}"/>
        <DataGridCheckBoxColumn Header="test" Width="*" Binding="{Binding test, UpdateSourceTrigger=PropertyChanged}"/>
    </DataGrid.Columns>
</DataGrid>