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.
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.
Dzięki, jak coś urodzi się z tego to dam znać. W MVVM stawiam dopiero pierwsze kroki.
Rozwiązanie okazało się banalnie proste. Wystarczyło po metodzieInitializeComponent()
, wstawić odpowiednio napisaną metodę ```WypełnijGrida()