Hallo,
@Nofear23m gab mir in einem anderen Thread schon ein Sample-Projekt mit einer simplen Standardimplementierung eines ServiceContainers mit Services wie IWindowService welche dazu da sind, Fenster in der WPF zu erstellen/öffnen und zu schließen.
In diesem Sample Projekt gibt es ein MyDefaultWindow welches den folgenden Inhalt hat:
Ich versuche aktuell von dem XAML wegzukommen und das Window mit dem ContentPresenter und seinem Binding prozedural zu erstellen.
Meine WindowService Klasse sieht aktuell so aus:
Der
Allerdings will das Binding vom ContentPresenter nicht funktionieren. Ich bin nicht sicher ob ich das prozedural so korrekt gemacht habe. Die
In meiner App.xaml habe ich ein DataTemplate für mein View erstellt:
Wobei mein MainViewModel von der ViewModelBase erbt und mein MainView ist ein UserControl welches einen simplen Button enthält.
Kompilieren tut alles, allerdings sieht mein Window wie folgt aus:
Wahrscheinlich mache ich beim Binden einfach was falsch, vielleicht ist der leere Konstruktor nicht dasselbe wie das binden an den Root. Daher habe ich den zweiten Konstruktor von der Binding Klasse genommen und einfach einen leeren String übergeben, aber auch da komme ich auf das gleiche Ergebnis. Wie kann ich prozedural auf den Root binden?
Edit: Ich habe das ganze mal auf meinem GitHub veröffentlicht. Die Struktur ist folgende. Das SlightLibs.WPF.Tests ist eine WPF Applikation in der ich die beiden anderen Bibliotheken referenziere. Ansonsten ist das Projekt von der Komplexität überschaubar und beinhaltet bis jetzt wirklich nur den Window Anzeige-Kram.
Außerdem habe ich es jetzt doch noch mal mit dem DefaultWindow als XAML probiert und bekomme es selbst da nicht zum rendern. Was vergesse ich?
@Nofear23m gab mir in einem anderen Thread schon ein Sample-Projekt mit einer simplen Standardimplementierung eines ServiceContainers mit Services wie IWindowService welche dazu da sind, Fenster in der WPF zu erstellen/öffnen und zu schließen.
In diesem Sample Projekt gibt es ein MyDefaultWindow welches den folgenden Inhalt hat:
XML-Quellcode
- <Window x:Class="MyDefaultWindow"
- 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:App"
- mc:Ignorable="d"
- Title="MyDefaultWindow" Height="185.911" Width="486.335">
- <ContentPresenter Content="{Binding}"/>
- </Window>
Ich versuche aktuell von dem XAML wegzukommen und das Window mit dem ContentPresenter und seinem Binding prozedural zu erstellen.
Meine WindowService Klasse sieht aktuell so aus:
C#-Quellcode
- public class WindowService : IWindowService
- {
- public void Create<TViewModel>() where TViewModel : ViewModelBase, new()
- {
- var window = new System.Windows.Window
- {
- DataContext = new TViewModel(),
- Content = new ContentPresenter()
- {
- Content = new Binding()
- }
- };
- window.Show();
- }
- public void Destroy<TViewModel>() where TViewModel : ViewModelBase
- {
- foreach(System.Windows.Window window in Application.Current.Windows)
- {
- if (window.DataContext.GetType() == typeof(TViewModel))
- window.Close();
- }
- }
- }
Der
Create()
-Methode kann ich generisch das ViewModel übergeben, sodass ich den DataContext
des Windows erstellen und zuweisen kann.Allerdings will das Binding vom ContentPresenter nicht funktionieren. Ich bin nicht sicher ob ich das prozedural so korrekt gemacht habe. Die
Content
-Eigenschaft vom ContentPresenter bindet sich ja an den Root. Bin mir aber unsicher ob ich das Binding so richtig konstruiere.In meiner App.xaml habe ich ein DataTemplate für mein View erstellt:
Wobei mein MainViewModel von der ViewModelBase erbt und mein MainView ist ein UserControl welches einen simplen Button enthält.
Kompilieren tut alles, allerdings sieht mein Window wie folgt aus:
Wahrscheinlich mache ich beim Binden einfach was falsch, vielleicht ist der leere Konstruktor nicht dasselbe wie das binden an den Root. Daher habe ich den zweiten Konstruktor von der Binding Klasse genommen und einfach einen leeren String übergeben, aber auch da komme ich auf das gleiche Ergebnis. Wie kann ich prozedural auf den Root binden?
Edit: Ich habe das ganze mal auf meinem GitHub veröffentlicht. Die Struktur ist folgende. Das SlightLibs.WPF.Tests ist eine WPF Applikation in der ich die beiden anderen Bibliotheken referenziere. Ansonsten ist das Projekt von der Komplexität überschaubar und beinhaltet bis jetzt wirklich nur den Window Anzeige-Kram.
Außerdem habe ich es jetzt doch noch mal mit dem DefaultWindow als XAML probiert und bekomme es selbst da nicht zum rendern. Was vergesse ich?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „seh“ ()