Autor Beitrag
RobAll
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Fr 19.04.19 22:01 
In der cs Klasse der XAML kann ich wie gewohnt auf die Controls zugreifen

Mir wurde MVVM vorgeschlagen...
Die Auslagerung des CodeBehind in das Main View Model bereitet mir Probleme.

Ich erzeuge über das MainViewModel.cs einen neuen Datensatz
ausblenden C#-Quelltext
1:
context.Tab_Material_Stammdaten.Add(entity);					

Die Datenbank wird aktualisiert.

Im nächsten Step benötige ich den Zugriff von der Klasse MainViewModel.cs auf das DataGrid der xaml um den Datensatz hinzuzufügen.
Leider finde ich keine Möglichkeit um von der Klasse MainViewModel.cs auf das Datagrid zuzugreifen.
z.B
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
DataGrid dg = new DataGrid(); 
dg = App.Current.MainWindow.FindName("DataGridStammdaten"as DataGrid;
dg.ItemsSource = null;
dg.Items.Refresh();
dg.ItemsSource = StammdatenView;

-> DataGrid wird nicht aktualisiert!

Der CodeBehind hat in der cs der XAML Klasse funktioniert.

Bitte um Hilfe

LG
RobAll

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 20.04.19 09:31 
Der Sinn vom MVVM ist ja gerade, daß dort View und ViewModel getrennt sind, also im ViewModel keine Zugriffe auf die View stattfinden.
Du mußt im XAML-Code der View mit DataBinding arbeiten und dann im ViewModel das gebundene Objekt (z.B. eine Liste vom Typ ObservableCollection) aktualisieren.

Dein unterer Code hat (selbst wenn er so funktionieren würde) einige unnötige Zuweisungen:
- erst erzeugst du ein neues DataGrid-Objekt, um es in der nächsten Zeile wieder zu überschreiben
- dasselbe dann auch für die ItemsSource

Nach welchem Tutorial oder Buch lernst du denn MVVM?
RobAll Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 20.04.19 19:01 
Mein Buch C# von Rheinwerkcomputing

Entity Objekt kopieren
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
var entity = context.Tab_Material_Stammdaten
                    .AsNoTracking()
                    .FirstOrDefault(p => p.ID == Datensatz.ID);
context.Tab_Material_Stammdaten.Add(entity);
context.SaveChanges();

Dies funktioniert auch in der Datenbank.

Die Aktualisierung des Datagrid erfolgt nun über das ViewModel.

ausblenden xaml
1:
2:
ItemsSource="{Binding StammdatenView}"
DataContext="{StaticResource vm}"


MainViewModel
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
_StammdatenList = new ObservableCollection<StammdatenViewModel>();
..
StammdatenViewModel Datensatz = StammdatenView.CurrentItem as StammdatenViewModel;
..
_StammdatenList.Add(Datensatz);

wird das gebundene Datagrid aktualisiert. Super! Th69, Danke für den Tip.


-Allerdings stehen die beiden EntityObjekte Original und Add nun in Relation, das heist beim Ändern werden beide Objekte geändert
Wie kann ich die beiden Objekte trennen?

oder

-wie kann ich die StammdatenList anderweitig aktualisieren?
Danke vorab

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: XML-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 21.04.19 09:37 
Da wirst du dann wohl eine Kopie der Entity machen müssen (also entweder per new oder aber evtl. gibt es eine Clone()-Methode o.ä. - beim EF kenne ich mich inhaltlich nicht so gut aus).

Du meinst das Buch "Visual C#"? Da ist MVVM aber nur sehr rudimentär angesprochen. Es gibt einige (meist englischsprachige) ausführlichere Tutorials darüber im Internet.
Aber ich hoffe, dir ist jetzt das Grundprinzip der Trennung von M, V und VM klarer?

Für diesen Beitrag haben gedankt: RobAll
RobAll Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Fr 26.04.19 22:26 
Guten Abend,

ich schließe dieses Thema, da ich dieses Problem mit MVVM Pattern gelöst habe, sogar als Quereinsteiger.
Wer kann ein gutes deutschsprachiges Tutorial empfehlen, am besten im PDF Format?
Danke nochmal an Th69.