2016-09-21 1 views
0

en utilisant MVVMLight Toolkit pour WPF et C#. Il existe une application WPF avec une fenêtre (Shell) et un assemblage dans lequel les contrôles sont (UI). Les ViewModels sont dans la troisième DLL (BIZ). La seule chose qui est affichée dans la fenêtre est un contrôle appelé "ShellView" qui est la partie principale de l'interface utilisateur. Je fais cela pour être en mesure de réutiliser la plupart de l'application dans différentes fenêtres.MVTMLight DataTemplates dans le dictionnaire des ressources d'assemblage

Actuellement, j'effectue toutes les liaisons entre view et viewmodel dans le fichier App.config "Shell".

référencé Ive:

L'Assemblée namespaces

xmlns:views="clr-namespace:Application.UI;assembly=Application.UI" 
xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ" 

ViewModel Locator

<vm:ViewModelLocator xmlns:vm="clr-namespace:Application.BIZ;assembly=Application.BIZ" x:Key="Locator" d:IsDataSource="True" /> 

Et utilisé les DataTemplates

<DataTemplate 
    DataType="{x:Type vm:ShellVM}"> 
<views:ShellView /> 

Donc, si im bindig le contenu d'un contrôle de contenu à une classe de "ViewModelBase" la vue s'affiche automatiquement - tout fonctionne bien. Maintenant, je suis en train d'essayer de déplacer la définition des modèles de données dans l'assemblage de l'interface utilisateur et de le référencer dans l'application fenêtre. Ainsi, tous les modèles et les liaisons sont effectués dans l'ensemble de l'interface utilisateur et la fenêtre fait simplement référence à tous les assemblages et affiche le "ShellView". Est-ce possible et comment est-ce que je dois référencer les assemblées dans App.xaml? Actuellement je reçois beaucoup d'exceptions xaml parse.

Nous vous remercions à l'avance

Répondre

0

Quelque chose comme cela devrait fonctionner, dans votre nouveau projet ajouter un dictionnaire de ressources et d'ajouter votre modèle pour qu'il

<ResourceDictionary> 
<DataTemplate x:Key="Foo" > 
</ResourceDictionary> 

Et dans votre app.xaml

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      path to your Foo datatemplate for example 
      <ResourceDictionary Source="MyAssembly;component/MyFolder/MyResourceDictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
</Application> 

puis à partir de votre code, vous le référencez simplement en tant que StaticResource

exemple

<ListBox ItemTemplate="{StaticResource Foo}"/> 
+0

Les modèles de données ne sont pas utilisés dans la fenêtre principale de l'application xaml. Seulement dans la bibliothèque de contrôle, votre solution fonctionnerait-elle aussi? Je les utilise généralement uniquement pour la liaison View-ViewModel: les modèles de données font le reste – pwoestmann

+0

@pwoestmann L'app.xaml que vous pouvez avoir dans n'importe quel projet. Cependant, pendant l'exécution, seul celui du projet exe est utilisé. Donc, si vous voulez rester avec cette solution, vous devrez dupliquer cette section de ressources. Donc, dans le projet où vous voulez consommer vos datatemplates, donc le concepteur ne se plaint pas, et un dans le projet principal quand il s'exécute il sait où les trouver. – adminSoftDK