2017-07-17 4 views
0

J'ai ce petit morceau de code ici. Ce que je veux réaliser est que la propriété Command est binded à la classe 1, tandis que la propriété IsEnabled est binded à la classe 2.MVVM - Multiples classes dans différents projets pour un contrôle

<MenuItem Header="A_nmelden..." Command="{Binding ShowLoginCommand}" IsEnabled="{Binding Source={x:Static UserManagementAdapter.LogOnIsEnabled}}"/> 

Mais il semble y avoir un problème en essayant d'accéder UserManagmentAdapter. La classe UserManagmentAdapter n'est pas dans le même projet que le projet qui contient ce contrôle MenuItem. Donc, je reçois l'erreur

"UserManagmentAdapter" est pas pris en charge dans un projet

Mes propriétés Windows Presentation Foundation (WPF) que je veux accéder à:

private bool logOnIsEnabled; 
public bool LogOnIsEnabled 
{ 
    get { return this.logOnIsEnabled; } 
    set { this.logOnIsEnabled = value; OnPropertyChanged("LogOnIsEnabled"); } 
} 

private bool logOffIsEnabled; 
public bool LogOffIsEnabled 
{ 
    get { return this.logOffIsEnabled; } 
    set { this.logOffIsEnabled = value; OnPropertyChanged("LogOffIsEnabled"); } 
} 

Mon Classe 2:

namespace ZF.UserManagement 
{ 
    [ExportAdapter(nameof(UserManagementAdapter))] 
    public class UserManagementAdapter : AdapterBase, IMultiValueConverter 
    {...} 
} 

J'espère que je l'ont fait assez clair. Quelqu'un sait comment accéder à UserManagmentAdapter?

Répondre

1

Vous devez ajouter une déclaration d'espace de noms dans votre XAML:

<MenuItem xmlns:local="clr-namespace:YourNamespace;assembly=YourAssembly" 
      Header="A_nmelden..." Command="{Binding ShowLoginCommand}" IsEnabled="{Binding Source={x:Static local:UserManagmentAdapter.LogOnIsEnabled}}"/> 

... où « YourNamespace » est l'espace de noms dans lequel la classe UserManagmentAdapter est définie et « votre_assembly » est le nom de l'assemblée.

Si la classe UserManagmentAdapter est défini dans votre projet d'application WPF, soit pas dans un ensemble séparé, vous devez retirer la ;assembly=YourAssembly partie:

xmlns:local="clr-namespace:ZF.UserManagement" 
+0

J'ai fait cela, mais pour une raison quelconque, il ne peux pas trouver "LogOnIsEnabled". Une idée de ce qui cause cela? ' ' – user2877820

+0

Est-ce une propriété de la classe UserManagmentAdapter? La classe est-elle définie dans un assembly séparé? – mm8

+0

Oui c'est une propriété publique et la classe est dans un autre projet – user2877820

0

Pourquoi ne pas faire Class1 et Class2 propriétés de votre ViewModel puis accès les propriétés en XAML:

code derrière

public class ViewModel 
{ 
    public Class1 class1 { get; set; } 
    public Class2 class2 { get; set; } 
} 

XAML

<MenuItem Header="A_nmelden..." Command="{Binding class1.ShowLoginCommand}" IsEnabled="{Binding class2.LogOnIsEnabled}"/>