Hallo,
Ich setze das MVVM Pattern und die CAB ein.
Ich lege für jedes ViewModel in den Ressourcen ein DataTemplate an. Welches als Inhalt die zum ViewModel passende View hat. Dann kann ich der UI einfach die ViewModels übergeben und es sucht sich selbst die richtige View. Dadurch entsteht eine noch losere Kopplung.
<DataTemplate DataType="{x:Type vm:XYViewModel}">
<v:XYView />
</DataTemplate>
Ich arbeite mit dem CAB(Composite Application Block) und habe deswegen die Anwendung auf viele Module aufgeteilt. Ich will nun diese DataTemplates aus den Modulen in die Ressourcen der Application laden. Kennt da jemand einen weg dieses DataTemplate aus dem Modul in die Applications Ressourcen zu laden?
Gruß Timo
Hallo Omit,
zwar keine Antwort auf deine Frage:
Aber mache es doch wie ich:
Jedes View (also sprich jedes UserControl) wird mit einem Attribut View versehen, dessen Konstruktor den Type des zugehörigen ViewModels entgegennimmt.
Nun braucht man nur noch einen DataTemplateSelector der per Reflection alle Typen einer Assembly (alle geladenen zu durchlaufen würde zu lange dauern - daher verwende ich ein weiteres Attribut ViewAssembly), die mit einem View Attribut gekennzeichnet sind durchläuft, den passenden findet und ein entsprechendes DataTemplate generiert.
Dann ist das ganze noch loser gekoppelt und man braucht keine unzähligen _DataTemplate_s.
Hallo Omit,
zwar auch keine Antwort auf die Frage, aber ist für WPF nicht Prism das Framework. Der CAB ist doch für Windows Forms gebaut.
lg
LG
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Danke erstmal. Ich dachte "CAB for Wpf" welches Feb. 09 rausgekommen ist, wäre Prism. Muss da nochmal mehr nachlesen, wenn meine Klausur rum ist.
Gruß Timo
Es gibt kein "CAB for Wpf".
Prism ist "patterns & practices Composite Application Guidance for WPF and Silverlight"
Ok, Composite Application Guidance for WPF(Prism), benutz ich, hab das mit dem Composite Application Block gleichgesetzt. Entschuldigung für die Verwirrung.
Gruß Timo
Ist zwar schon etwas her. (Bin noch Student). Bin über die Antwort gestolpert:
PresentationModel with datatemplates in compositewpf prism sample
private static void RegisterResources()
{
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri(“pack://application:,,,/Commanding.Modules.Order;Component/OrdersResourceDictionary.xaml”);
Application.Current.Resources.MergedDictionaries.Add(dictionary);
}
Gruß Timo
Hier der Code in XAML
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/dllname;component/verzeichnisinderxamlindllliegt/Dictionary.xaml" />
<!--<ResourceDictionary Source="styles.xaml"></ResourceDictionary>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
lg
Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp