I am using datagrid in WPF application. Following is my XAML code
<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>
Following is my C# code
public partial class MainWindow : Window
{
public ObservableCollection<Track> data = new ObservableCollection<Track>();
public MainWindow()
{
InitializeComponent();
data.Add(new Track() { title = "Think", artist = "Aretha Franklin", number = 7, test=true });
data.Add(new Track() { title = "Minnie The Moocher", artist = "Cab Calloway", number = 9, test = true });
data.Add(new Track() { title = "Shake A Tail Feather", artist = "Ray Charles", number = 4, test = true });
dgTest.ItemsSource = data;
}
}
public class Track
{
private String _t;
private String _a;
private int _n;
private bool _fg;
public String title
{
get { return _t; }
set { _t = value; }
}
public String artist
{
get { return _a; }
set { _a = value; }
}
public int number
{
get { return _n; }
set { _n = value; }
}
public bool test
{
get { return _fg; }
set { _fg = value; }
}
}
The data is imported when I start application but if I make changes in any of the cell the changes are not committed since when I try to read data from datagrid it still shows old data. How can I commit changes when user changes field in datagrid?
Implement INotifyPropertyChanged on class Track. like that
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));
}
}
In XAML code, you can modify a little bit:
Binding="{Binding title, Mode="TwoWay", UpdateSourceTrigger="PropertyChanged"}