Hey,
Ik zit hier al een lange tijd mee vast en vind maar geen oplossing voor dit probleem.
Ik ben een programma aan het schrijven in WPF met MVVM. Hierbij gebruik ik EF voor de database-acties.
In mijn ViewModel heb ik dit:
Dit is gebind met de ItemsSource property van een Datagrid, zodat in de Datagrid alles weergegeven wordt. De SelectedItem property van deze datagrid is gebind aan een CurrentMember property in de VM:
Wanneer een rij in de datagrid geselecteerd wordt, wordt dit object nu bijgehouden in de property CurrentMember. De properties van dit object worden dan weergegeven in verschillende textboxes en als de gebruiker op "new member"of "edit member" klikt, worden deze enabled.
Het probleem is als volgt: als de gebruiker een member aanpast en op cancel klikt, zouden de oude gegevens terug weergegeven moeten worden. Nu worden de niet-aangepaste gegevens opgeslagen:
Ik heb nagedacht over deze oplossingen:
- De gegevens terug uit de database halen: dit lijkt me een onnodige actie en bovendien lukt het me niet met EF. Maar zelfs als het mocht lukken, lijkt dit me niet echt de bedoeling.
- Gebruik maken van dee interface: MSDN: IEditableObject Interface (System.ComponentModel)
Het probleem is dat mijn entity-klassen door EF gegenereerd worden en deze aanpassingen dus niet zomaar mogelijk zijn..
- Het te bewerken object kopiëren en bij het cancellen het oude object terugzetten: Dit lijkt me de beste optie. Met Automapper (https://github.com/AutoMapper/AutoMapper) is dit me ook gelukt, alleen lukt het me niet om dit gekopieërde object dan terug in de database te krijgen wanneer de gebruiker beslist om het op te slaan.
Voor de duidelijkheid:
- Ik gebruik context.SaveChanges(); om de wijzigingen weg te schrijven naar de DB.
- De properties van het object moeten meteen aangepast worden wanneer de gebruiker iets intypt in de textboxes, aangezien de validatie meteen uitgevoerd wordt tijdens het typen (dmv IDataErrorInfo).
Ik zit hier al lange tijd mee vast en vind maar geen oplossing. Iemand een idee wat ik hier best doe?
Bedankt
Ik zit hier al een lange tijd mee vast en vind maar geen oplossing voor dit probleem.
Ik ben een programma aan het schrijven in WPF met MVVM. Hierbij gebruik ik EF voor de database-acties.
In mijn ViewModel heb ik dit:
code:
1
2
3
4
| public List<Member> Members
{
get { return repository.Members.OrderBy(x => x.Firstname).ToList(); }
} |
Dit is gebind met de ItemsSource property van een Datagrid, zodat in de Datagrid alles weergegeven wordt. De SelectedItem property van deze datagrid is gebind aan een CurrentMember property in de VM:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| public Member CurrentMember
{
get { return currentMember; }
set
{
if (currentMember != value)
{
currentMember = value;
RaisePropertyChanged("CurrentMember");
}
}
} |
Wanneer een rij in de datagrid geselecteerd wordt, wordt dit object nu bijgehouden in de property CurrentMember. De properties van dit object worden dan weergegeven in verschillende textboxes en als de gebruiker op "new member"of "edit member" klikt, worden deze enabled.
Het probleem is als volgt: als de gebruiker een member aanpast en op cancel klikt, zouden de oude gegevens terug weergegeven moeten worden. Nu worden de niet-aangepaste gegevens opgeslagen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| private void CancelExecute(object parameter)
{
if (currentMember.Id == 0) // new member
{
CurrentMember = null;
}
else
{
// restore CurrentMember to old value - how?
}
Editing = false;
} |
Ik heb nagedacht over deze oplossingen:
- De gegevens terug uit de database halen: dit lijkt me een onnodige actie en bovendien lukt het me niet met EF. Maar zelfs als het mocht lukken, lijkt dit me niet echt de bedoeling.
- Gebruik maken van dee interface: MSDN: IEditableObject Interface (System.ComponentModel)
Het probleem is dat mijn entity-klassen door EF gegenereerd worden en deze aanpassingen dus niet zomaar mogelijk zijn..
- Het te bewerken object kopiëren en bij het cancellen het oude object terugzetten: Dit lijkt me de beste optie. Met Automapper (https://github.com/AutoMapper/AutoMapper) is dit me ook gelukt, alleen lukt het me niet om dit gekopieërde object dan terug in de database te krijgen wanneer de gebruiker beslist om het op te slaan.
Voor de duidelijkheid:
- Ik gebruik context.SaveChanges(); om de wijzigingen weg te schrijven naar de DB.
- De properties van het object moeten meteen aangepast worden wanneer de gebruiker iets intypt in de textboxes, aangezien de validatie meteen uitgevoerd wordt tijdens het typen (dmv IDataErrorInfo).
Ik zit hier al lange tijd mee vast en vind maar geen oplossing. Iemand een idee wat ik hier best doe?
Bedankt