Autor Beitrag
Seeker63
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Mo 06.06.16 03:51 
Hallo,

ich bin relativ neu bei C# und habe ein Problem mit einem Model das ich in mehreren ViewModels verwenden möchte. Allerdings kommt mir dabei immer in die Quere das man das Model in dem jeweiligen ViewModel mit "new" neuinitialisieren muss. Im Web habe ich gelesen das man das Model auch einfach über den Konstruktor an das ViewModel übergeben kann, dann ist bei mir das Model immer "null".

Mein Model ist so aufgebaut.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public class Model
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private string nachname;
        public string Nachname
        {
            get { return nachname; }
            set { nachname = value; }
        }

        private int id;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
    }


Mein ViewModel A

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public class ViewModelA
    {
        private Model Data;

        public ViewModelA(Model data)
        {
            Data = data;
        }

        public string Name
        {
            get { return Data.Name; }
        }

        public string Nachname
        {
            get { return Data.Nachname; }
        }
    }


und ViewModel B

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public class ViewModelB
    {
        private Model Data;

        public ViewModelB(Model data)
        {
            Model Data = new Model();
        }

        public int ID
        {
            get { return Data.Id; }
        }

        public string Name
        {
            get { return Data.Name; }
        }
    }


Wenn ich das Model also jedesmal initialisieren muss habe ich jedesmal ein Model ohne Daten darin. Gibt es eine Möglichkeit ein Model in mehreren ViewModels zu nutzen ohne es neu initialisieren zu müssen? Eventuell IoC? Oder habe ich einen ganz anderen Fehler bei meinen Überlegungen?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 06.06.16 07:41 
Du machst es doch schon richtig in Variante A:

ausblenden C#-Quelltext
1:
2:
3:
4:
public ViewModelA(Model data)
{
    Data = data;
}


So muss das im ViewModel aussehen.
Wenn Du nun das ViewModel erzeugst, dann muss das Model instanziiert werden.
Oder Du bekommst es z.B. von einer Datenbank-Schnittstelle und kannst es für das ViewModel verwenden, dann kümmert sich die Datenbank-Ebene darum, dass das Model instanziiert wird.


Ach ja:
Benenne deine Klassen-Variablen am besten nach dem Schema: "_variablenName"
Also Unterstrich und dann klein geschrieben beginnen, aber trotzdem noch CamelCase.
Hat sich so eingebürgert und so erkennt man direkt, dass das eine Klassen-Variable ist.
Seeker63 Threadstarter
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Di 07.06.16 02:27 
Danke für deine Antwort.

Das Problem ist aber wenn ich nun noch ein ViewModel C hätte welches mit einer View verbunden ist in der ich die Daten eingebe, muss ich dort schon das ViewModel erzeugen. Wenn ich nun ViewModel A erzeuge wird mein Model ebenfalls wieder erzeugt und somit habe ich in meinem Model keine Daten, also in diesem Fall 2 leere Strings und eine 0.
Das ist die Sache die ich nicht gebacken kriege.
Also müsste ich doch eigentlich mein Model in einem ViewModel erzeugen welches während der gesamten Zeit "aktiv" ist. Dann müsste ich doch aber wenn ich auf mein Model zugreifen möchte jedesmal eine Referenz auf dieses ViewModel machen. Was widerum nicht dem Gedanken von MVVM entspricht.

Habe ich mich da irgendwo in einen bösen Denkfehler verrannt?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.06.16 05:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 07.06.16 13:16 
Das mit dem ModelTyp finde ich nicht gut, das geht meiner Meinung nach gegen OOP bzw. ließe sich besser mit OOP lösen


Eigentlich sollte es so ablaufen:

Du hast ein Data-Layer, das vollständig alleine seine Daten verwalten kann. Es kann auch neue Daten-EInträge anlegen, diese löschen, bearbeiten und speichern.
Das ViewModel in dem UI-Layer hat dagegen die Aufgabe, die Daten vom Model entgegen zu nehmen und für die View auf zubereiten, das heißt: Es erstellt kein Model. Höchstens fragt es beim Data-Layer nach, ob es ein Model erzeugen kann und das entscheidet dann auch über die Lebensdauer des Models.


Eine Idee, wie man das machen könnte, ist anhand des Repository-Patterns:
Ein Repository regelt die Zugriffe im Bezug auf einen kleinen Bereich. Das heißt Daten abfragen, Daten einfügen, bearbeiten, speichern oder löschen.
Dein ViewModel bekommt dann die Repositories über den Konstruktor geliefert, die er braucht - wenn er welche braucht.

Um es mal in Form von Interfaces zu beschreiben:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public interface IMyRepository
{
    IEnumerable<MyModel> GetAll();
    IEnumerable<MyModel> GetById(Guid id);
    IEnumerable<MyModel> GetByName(string name);
    void Insert(IEnumerable<MyModel> models);
    void Update(IEnumerable<MyModel> models);
    void Delete(IEnumerable<MyModel> models);
}


Die Nutzung, wenn es z.B. eine Liste von Models gibt:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
public class MyViewModels
{
    private readonly IMyRepository _myRepository;
    private string _name;

    public IEnumerable<MyViewModel> ViewModels { get; private set; }

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            Refresh();
        }
    }

    public MyViewModel(IMyRepository myRepository)
    {
        _myRepository = myRepository;
    }

    public Refresh()
    {
        ViewModels = _myRepository.GetByName(Name).Select(model => new MyViewModel(model));
    }
}

public class MyViewModel
{
    public string Name { get; }

    public MyViewModel(MyModel model)
    {
        Name = model.Name;
    }
}


Ohne Notifications und skizzenhaft.

Das Repository kann dann z.B. eine eigene Liste halten, welche Models es gibt und entscheidet, wann ein Vorhandenes verwendet oder ein neues erstellt wird.
Diese Aufgabe sollte nicht das ViewModel übernehmen, das ViewModel tut in der Regel nichts selber, es weiß aber, wo die entsprechenden Funktionen zu finden sind und führt sie aus.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 07.06.16 20:55 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 07.06.16 22:47 
Enums sind nicht objektorientiert, das sind Wertetypen ;) Per default sind sie int.
Sie sind aber sehr hilfreich, um verschiedene Zustände zu definieren oder Konstanten, oder Optionen, etc.
Zum Beispiel für irgendeine Art Workflow einen Zustand verfügbar machen (Gestartet, etc.), oder für Logging die Wertung des zu schreibenden Log-Eintrages, oder beim FileStream, wie die Datei geblockt werden soll. Das alles sind Beispiele, die nicht die Grundfunktion verändern.


Aber ein anderer Grund, weshalb ich deine Lösung ganz schlecht finde: Sie erfüllt effektiv drei verschiedene Aufgaben, was gegen das Single Responsible Principle verstößt.
Ich verstehe auch nicht so ganz den Vorteil davon.
Wenn es mehrere Models gibt, die gleiche Properties aber mit unterschiedlicher Bedeutung haben, dann sind die Properties nicht gleich, sie sehen nur gleich aus.



Interfaces sind nicht immer die Lösung, aber richtig eingesetzt sind sie es häufig und sie machen es an vielen Stellen leichter, die Komponenten zu trennen.
Am Ende ist es immer einfacher, eine Funktionalität auszutauschen, wenn Du nur das Interface benutzt. Zusammen mit IoC ist das nach der Entwicklung der neuen Version nur noch eine Zeile Code.
Aus dem Grund verberge ich große Bereiche wie das Data-Layer gerne hinter Interfaces. Anfangs mag das ein bisschen mehr Aufwand bedeuten, aber es ist nicht viel zusätzlicher Aufwand, kann mir später aber enormen Mehraufwand ersparen.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.06.16 02:09 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Seeker63 Threadstarter
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Mi 08.06.16 04:40 
Hallo, ich habe heute eine kleine App aufgebaut und mit euren Hinweisen versucht mein Problem in den Griff zu bekommen. Aber irgendwo habe ich einen Fehler in meinem Programm. Meine kleine App sieht folgendermaßen jetzt aus.

Das Model

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
public class Model
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private string _nachname;
        public string Nachname
        {
            get { return _nachname; }
            set { _nachname = value; }
        }

        private int _id;
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
    }


ViewModelA

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
private Model Data;
        private ViewA _viewA; 

        public ViewModelA(Model data)
        {
            Data = data;
        }

        public ViewModelA(Model data, ViewA viewA)
        {
            _viewA = viewA;
            Data = data;
        }

        public string Name
        {
            get { return Data.Name; }
            set
            {
                if (Data.Name != value)
                {
                    Data.Name = value;
                    OnPropertyChanged("Name");
                }
            }
        }

        public string Nachname
        {
            get { return Data.Nachname; }
            set
            {
                if (Data.Nachname != value)
                {
                    Data.Nachname = value;
                    OnPropertyChanged("Nachname");
                }
            }
        }

        public int ID
        {
            get { return Data.Id; }
            set
            {
                if (Data.Id != value)
                {
                    Data.Id = value;
                    OnPropertyChanged("ID");
                }
            }
        }
    }


ViewModelB

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
public class ViewModelB: ViewModelBase
    {
        private Model Data;
        private ViewB _viewB;

        public ViewModelB(Model data)
        {
            Data = data;
        }

        public ViewModelB(ViewB viewB)
        {
            _viewB = viewB;
        }

        public string Name
        {
            get { return Data.Name; }
        }

        public string Nachname
        {
            get { return Data.Nachname; }
        }
    }


MeinMainViewModel

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
public class MainViewModel: ViewModelBase
    {
        private ViewModelBase _currentViewModel;

        public ICommand ViewACommand { get; private set; }
        public ICommand ViewBCommand { get; private set; }

        public MainViewModel(Window mainWindow)
        {
            MainWindow = mainWindow;

            ViewACommand = new DelegateCommand(o => ViewACmd());
            ViewBCommand = new DelegateCommand(o => ViewBCmd());
        }

        public Window MainWindow { get; set; }

        public ViewModelBase CurrentViewModel
        {
            get { return _currentViewModel; }
            set
            {
                _currentViewModel = value;
                OnPropertyChanged("CurrentViewModel");
            }
        }

        private void ViewACmd()
        {
            CurrentViewModel = new ViewModelA(new Model(), new ViewA());
        }

        private void ViewBCmd()
        {
            CurrentViewModel = new ViewModelB(new ViewB());
        }
    }


Mein MainWindow
ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
<Window x:Class="Application1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Application1"
        xmlns:viewmodels="clr-namespace:Application1.ViewModels"
        xmlns:views="clr-namespace:Application1.Views"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="350"
        Width="525">

    <Window.Resources>
        <DataTemplate DataType="{x:Type viewmodels:ViewModelA}">
            <views:ViewA/>
        </DataTemplate>

        <DataTemplate DataType="{x:Type viewmodels:ViewModelB}">
            <views:ViewB/>
        </DataTemplate>
    </Window.Resources>
    
    <DockPanel VerticalAlignment="Top">
        <Grid Height="40" DockPanel.Dock="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="Buttons"/>
                <ColumnDefinition SharedSizeGroup="Buttons"/>
            </Grid.ColumnDefinitions>
            <Button Content="ViewA" Command="{Binding ViewACommand}" Grid.Column="0"/>
            <Button Content="ViewB" Command="{Binding ViewBCommand}" Grid.Column="1"/>
        </Grid>

        <ContentControl Content="{Binding Path=CurrentViewModel}" DockPanel.Dock="Top" />

    </DockPanel>
</Window>


ViewA

ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
<UserControl x:Class="Application1.Views.ViewA"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Application1.Views"
             xmlns:viewmodels="clr-namespace:Application1.ViewModels"
             Height="auto"
             Width="auto">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>

        <TextBlock Text="Name" Grid.Column="0" Grid.Row="0"/>
        <TextBox Text="{Binding Name}" Grid.Column="1" Grid.Row="0"/>

        <TextBlock Text="Nachname" Grid.Column="0" Grid.Row="1"/>
        <TextBox Text="{Binding Nachname}" Grid.Column="1" Grid.Row="1"/>

        <TextBlock Text="ID" Grid.Column="0" Grid.Row="2"/>
        <TextBox Text="{Binding ID}" Grid.Column="1" Grid.Row="2"/>
    </Grid>
</UserControl>


ViewB

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
<UserControl x:Class="Application1.Views.ViewB"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Application1.Views"
             xmlns:viewmodels="clr-namespace:Application1.ViewModels"
             Height="auto"
             Width="auto">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
        </Grid.RowDefinitions>

        <TextBlock Text="Name" Grid.Column="0" Grid.Row="0"/>
        <TextBox Text="{Binding Name, Mode=OneWay}" Grid.Column="1" Grid.Row="0"/>

        <TextBlock Text="Nachname" Grid.Column="0" Grid.Row="1"/>
        <TextBox Text="{Binding Nachname, Mode=OneWay}" Grid.Column="1" Grid.Row="1"/>
    </Grid>
</UserControl>


Entschuldigung das ich den XAML-Code nun so da rein kopiert habe, habe aber Nichts gefunden wie man den ordentlich einfügt.

So wie es hier ist bekomme ich in dem Moment wo ich die ViewB aufmachen will (nachdem ich in ViewA Daten eingegeben habe) eine NullReferenzException wenn ViewB versucht die Daten für den Namen abzuholen.
Wenn ich ViewB gleich mache wie ViewA sehe ich zwei leere TextBoxen.

Ich hoffe ich nerve mit meinen lapidaren Fragen nicht so sehr. Auf jeden Fall schon mal Danke im voraus.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.06.16 05:36 
- Nachträglich durch die Entwickler-Ecke gelöscht -
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Mi 08.06.16 09:29 
Kann es sein, dass du deine ViewsModels irgendwie so erzeugst:
ausblenden C#-Quelltext
1:
2:
3:
Model data = new Model();
viewModelA = new ViewModelA(data);
viewModelB = new ViewModelB(data);

Falls ja, liegt hier der Hund begraben. Bist du mal mit dem Debugger durchgegangen und hast die Werte des Models geprüft?
Meiner Ansicht nach liegt dein Problem daran, dass du beide Views gleichzeitig instanziierst (falls du das tatsächlich tust). Angenommen es ist so, dann hast du dein ViewModelA (ich nenne die ViewModels jetzt einfach nur noch A bzw. B) das an dein Model gebunden ist und B das ebenfalls an das Model gebunden ist. Doch wie soll B jetzt mitbekommen, dass A etwas im Model geändert hat? Du hast zwar INotifyChanged in beiden ViewModels implementiert, jedoch nicht im Model. Defakto wird nur das PropertyChanged Event des ViewModels ausgelöst, welches auch in das Model schreibt. Dadurch wird dein Model zwar geändert, jedoch bekommt das das andere ViewModel nicht mit und löst somit auch nicht sein PropertyChanged Event aus. Daraus folgt, dass die View nicht geupdated wird, weil das ViewModel schlichtweg nicht bemerkt, dass das Model geändert wurde.

Lösen kannst du das, indem du B erst instanziierst, nachdem A alle Werte in das Model geschrieben hast, oder, indem du in deinem Model das INotifyPropertyChanged Interface implementierst und somit alle ViewModels über Änderungen informieren kannst.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Seeker63 Threadstarter
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Do 09.06.16 02:22 
Die Klasse ViewA ist ein einfaches UserControl um Daten einzugeben, während ViewB einfach dazu da ist um die eingegebenen Daten anzuzeigen. Die Klasse ViewModelBase enthält einfach nur das INotifyPropertyChanged Event.

Das Model wird einfach an die Konstruktoren der beiden ViewModels übergeben ohne es vorher mit new zu erzeugen.

Die ViewModels A und B werden jeweils durch klicken auf einen Button über ein DelegateCommand erzeugt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private ViewModelBase _currentViewModel;
        
public ICommand ViewACommand { get; private set; }
public ICommand ViewBCommand { get; private set; }

public MainViewModel(Window mainWindow)
{
     MainWindow = mainWindow;

     ViewACommand = new DelegateCommand(o => ViewACmd());
     ViewBCommand = new DelegateCommand(o => ViewBCmd());
}


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void ViewACmd()
{
    CurrentViewModel = new ViewModelA(new Model(), new ViewA());
}

private void ViewBCmd()
{
    CurrentViewModel = new ViewModelB(new ViewB());
}


CurrentViewModel ist von ViewModelBase abgeleitet.

Habe in meinem Model nun auch das INotifyPropertyChanged Interface implementiert und in den Settern auch OnPropertyChanged aufgerufen. Aber es bleibt das Gleiche.
Entweder habe ich 2 leere TextBoxen in ViewB nachdem ich in ViewA Daten eingegeben habe, oder ich bekomme eine NullReferenceException wenn ViewB die Daten abrufen will.
Liegt mein Problem vielleicht daran wie ich die 2 Views erzeuge?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
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: Do 09.06.16 09:31 
Hallo,

deine Code-Logik stimmt nicht: du erzeugst bisher die Views und übergibst diese den ViewModels als Konstruktor-Parameter.
Die Views dürfen aber nur die ViewModels kennen und diese wiederum nur das Model: V -> VM -> M

Und das Model übergibst du bisher ja auch nur dem einen ViewModelA. Woher soll das zweite ViewModelB denn dann auf dieses zugreifen?

Ich denke du solltest dir noch mal in Ruhe einen Artikel zum MVVM durchlesen, z.B. Model-View-ViewModel (MVVM) Explained.


Zuletzt bearbeitet von Th69 am Fr 10.06.16 08:56, insgesamt 1-mal bearbeitet
Seeker63 Threadstarter
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Fr 10.06.16 00:21 
Hallo,

danke für eure Hilfe werde mich nun nochmal tiefgreifender mit dem Thema MVVM beschäftigen. Der Link war schon ziemlich hilfreich.
Seeker63 Threadstarter
Hält's aus hier
Beiträge: 9


C# (VS 2015)
BeitragVerfasst: Di 21.06.16 14:48 
Hallo,

habe mich in der letzten Zeit nochmal intensiver mit MVVM beschäftigt. Wollte mich nochmal für die schnelle Hilfe von Euch bedanken. Konnte so mein Problem lösen.