C# 在datagrid中编辑和保存数据
我正在WPF应用程序中使用datagrid。下面是我的XAML代码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
<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>