MVVM - datagrid returnerer ikke den opdaterede værdi
Jeg er ny i MVVM og arbejder på et system med et datagrid, hvor man skal kunne redigere rækkerne.Når jeg opdaterer en række og debugger bliver Update funktionen kaldt men objecte, det får som parameter indeholder stadig "Person" med de oprindelige værdier - ikke de opdaterede.
Jeg bruger RelayCommand til at uddelegere opdateringerne og som trigger bruger jeg CellEditEnding.
Nedenfor er min kode, som er en meget forsimplet version af mit system. Sig endelig til, hvis noget skal uddybes
Model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
namespace mvvmproblem.Model
{
class Person: INotifyPropertyChanged
{
string _Name;
public string Name
{
get
{
return _Name;
}
set
{
if(_Name!=value)
{
_Name = value;
RaisePropertyChanged("Name");
}
}
}
int _Age;
public int Age
{
get
{
return _Age;
}
set
{
if(_Age!=value)
{
_Age = value;
RaisePropertyChanged("Age");
}
}
}
void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
ViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Collections.ObjectModel;
using mvvmproblem.Model;
namespace mvvmproblem.ViewModel
{
class ViewModelMain
{
public ObservableCollection<Person> People { get; set; }
public RelayCommand UpdateCommand { get; set; }
public ViewModelMain()
{
People = new ObservableCollection<Person>
{
new Person { Name="John", Age=34 },
new Person { Name="Harry",Age=26 },
new Person { Name="Michael", Age=59 },
};
UpdateCommand = new RelayCommand(Update);
}
void Update(object obj)
{
//here the update should happen, but the values in the object remains those before I updated the datagrid cell
}
}
}
View
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModel="clr-namespace:mvvmproblem.ViewModel" x:Class="mvvmproblem.MainWindow"
xmlns:i ="http://schemas.microsoft.com/expression/2010/interactivity"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="myDataGrid" ItemsSource="{Binding People}" HorizontalAlignment="Left" Margin="124,82,0,0" VerticalAlignment="Top" IsSynchronizedWithCurrentItem="False">
<DataGrid.DataContext>
<ViewModel:ViewModelMain/>
</DataGrid.DataContext>
<i:Interaction.Triggers>
<i:EventTrigger EventName="CellEditEnding">
<i:InvokeCommandAction Command="{Binding UpdateCommand}" CommandParameter="{Binding ElementName=myDataGrid, Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
</Grid>
</Window>
Mainwindow.cs indeholder bare initialize components.