[WPF] Jak sprawić aby DataGrid był edytowalny po pobraniu bazy danych sqlite

0

Napisałem kod pobierający dane z bazy danych sqlite do kontrolki DataGrid.
Mam problem ze sprawieniem aby użytkownik po pobraniu widoku tejże bazy mógł edytować dane w DataGridzie i je zapisać. O ile z samym zapisem do bazy raczej dam sobie radę, to skończyły mi się pomysły żeby sprawić by DataGrid był edytowalny.
W XAMLu właściwości CanUSerAddRows są ustawione na True oczywiście.

0

W klasie kolekcji zasilającej DataGrida, czyli w jego viewmodelu, wydeleguj zdarzenie, które odpalisz podczas edycji czyli np. przy setterze własności zbindowanej z komórką wiersza. Zdarzenie możesz łapać później w code behind i obsłużyć.

Czyli mniej więcej:

public class DataGridRowViewModel : INotifyPropertyChanged
{
	public delegate void CellEditedDelegate();
	public event CellEditedDelegate CellEditedEvent;
	
	private string cellText = "";
	public string CellText
	{
		get => cellText;
		set
		{
			cellText = value;
			//	Tutaj on property changed, czy co tam masz do mvvm
			
			//	I poniższy event łapiesz np. w code-behind.
			CellEditedEvent?.Invoke();
		}
	}
}

Można też takie rzeczy połapać event aggregatorem Prisma. Nie trzeba byłoby wystawiać kolekcji z viewmodelu do code behind, żeby łapać eventy każdej komórki. Ot zaleta frameworków mvvm. :-)

Bez Prisma można rzecz jasna zrobić w głównym viewmodelu event, który odpala się w reakcji na event z komórki. Wtedy nie ma potrzeby propagacji bebechów do code-behind.

0

Dzięki, jak coś urodzi się z tego to dam znać. W MVVM stawiam dopiero pierwsze kroki.

0

Rozwiązanie okazało się banalnie proste. Wystarczyło po metodzieInitializeComponent(), wstawić odpowiednio napisaną metodę ```WypełnijGrida()

1 użytkowników online, w tym zalogowanych: 0, gości: 1