2017-05-11 4 views
0

Dans MainWindow.xaml J'ai:emplacement ViewModel dans le sous-dossier (XAML, espace de noms)

<Window x:Class="LayoutMVVM.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" 
     mc:Ignorable="d" 
     ResizeMode="NoResize" 

     xmlns:local="clr-namespace:LayoutMVVM" 
     xmlns:veiwmodels="clr-namespace:LayoutMVVM.ViewModels"   
     xmlns:views="clr-namespace:LayoutMVVM.Views" 

     Title="Layout" Height="750" Width="650"> 

Dans Windows.Resources Je suis contraignant datacontext:

<Window.Resources> 
     <DataTemplate x:Name="SettingsTemp" DataType="{x:Type veiwmodels:SettingsModel}"> 
      <views:SettingsView DataContext="{Binding}" /> 
     </DataTemplate> 
    </Window.Resources> 

Mais quand mon autre modèle et la vue se trouve dans le sous-dossier comme ci-dessous:

enter image description here

Je ne peux pas faire:

<DataTemplate x:Name="OpenTemp" DataType="{x:Type ViewModels:Open.OpenModel}"> 
    <views:Open.OpenView DataContext="{Binding}" /> 
</DataTemplate> 

ou LayoutMVVM.ViewModels.Open.OpenModel

ou LayoutMVVM/ViewModels/Open/OpenModel

Répondre

1

Vous devez ajouter nouveau en-tête de commande:

xmlns:veiwmodelsOpen="clr-namespace:LayoutMVVM.ViewModels.Open 

ou vous peut définir l'espace de noms de OpenModel à LayoutMVVM.ViewModels (pasLayoutMVVM.ViewModels.Open).

Il n'y a pas d'autre moyen, je pense.

+0

correctement voir les choses et il travaille avec votre première réponse – 4est

+0

un de plus: LayoutMVVM.ViewModels -> dans ce cas, il devrait être assigner à DataTemplate directement? – 4est

+0

non, vous déclarez * veiwmodels * dans la balise window xaml, donc dans DataTemplate vous pouvez écrire * DataType = "{x: Type veiwmodels: OpenModel}" * (si l'espace de noms de OpenModel est * LayoutMVVM.ViewModels *) – Digger