Hey,
bin noch dabei mich mit MVVM vertraut zu machen, dabei stoße ich grad auf ein Problem, welches mich zwingt Code Behind einzusetzen, auf welchen ich erst verzichten wollte.
Diese Sache ist die: Anfangs hatte ich aus Bequemlichkeit, alles in einem Projekt. Das führte dazu das ich einfach in einem ViewModel eine Instanz von einem 2. Window anlegen konnte. Nachdem ich mich entschloss eine Solution mit mehreren Projekten anzulegen, stellte ich fest, das wenn alles in einem Projekt ist, die ViewModels die Views kennen, mehr oder weniger. Bei einzelnen Projekten kann man ja keine RingVerweis machen, also wenn Projekt A einen Verweis auf Projekt B hat, kann in B kein verweis auf A gemacht werden. So kennen ViewModels nicht die Views, was mich dann dazu zwingt CodeBehind einzusetzen um weitere Windows zu nutzen, da es ja reine Logik für die Views ist, halte ich das für akzeptabel.
Beispiel für Code Behind, wenn ein Command von einem Button ausgeführt wird, werfe ich im ViewModel ein Event um die View zu informieren das 2. Fenster zu zeigen.
Spoiler anzeigen
Wie baut ihr eure Solutions auf? Einzelnes Projekt oder auch mehrere? Setzt ihr CodeBehind ein? Falls ja, unter welchen Umständen?
bin noch dabei mich mit MVVM vertraut zu machen, dabei stoße ich grad auf ein Problem, welches mich zwingt Code Behind einzusetzen, auf welchen ich erst verzichten wollte.
Diese Sache ist die: Anfangs hatte ich aus Bequemlichkeit, alles in einem Projekt. Das führte dazu das ich einfach in einem ViewModel eine Instanz von einem 2. Window anlegen konnte. Nachdem ich mich entschloss eine Solution mit mehreren Projekten anzulegen, stellte ich fest, das wenn alles in einem Projekt ist, die ViewModels die Views kennen, mehr oder weniger. Bei einzelnen Projekten kann man ja keine RingVerweis machen, also wenn Projekt A einen Verweis auf Projekt B hat, kann in B kein verweis auf A gemacht werden. So kennen ViewModels nicht die Views, was mich dann dazu zwingt CodeBehind einzusetzen um weitere Windows zu nutzen, da es ja reine Logik für die Views ist, halte ich das für akzeptabel.
Beispiel für Code Behind, wenn ein Command von einem Button ausgeführt wird, werfe ich im ViewModel ein Event um die View zu informieren das 2. Fenster zu zeigen.
C#-Quellcode
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private EqualizerWindow equalizerWindow;
- private void EqualizerWindowClosed(object sender, EventArgs e)
- {
- equalizerWindow = null;
- }
- public void OnShowEqualizer_Clicked(object sender, EventArgs e)
- {
- if (equalizerWindow != null)
- {
- return;
- }
- equalizerWindow = new EqualizerWindow();
- equalizerWindow.Closed += EqualizerWindowClosed;
- equalizerWindow.Show();
- ((ViewModels.ViewModelMaster)DataContext).viewModelEqualizerWindow = (ViewModels.ViewModelEqualizerWindow)equalizerWindow.DataContext;
- }
- private void Window_Loaded(object sender, RoutedEventArgs e)
- {
- ((ViewModels.ViewModelMaster)DataContext).viewModelMainWindow.OnShowEQClicked += OnShowEqualizer_Clicked;
- }
- private void Window_Closed(object sender, EventArgs e)
- {
- if (equalizerWindow != null)
- {
- equalizerWindow.Close();
- }
- }
- }
Wie baut ihr eure Solutions auf? Einzelnes Projekt oder auch mehrere? Setzt ihr CodeBehind ein? Falls ja, unter welchen Umständen?