MVVM - 用于一个控件的不同项目中的Mutliple类

时间:2017-07-17 09:38:42

标签: c# wpf mvvm

我这里有一小段代码。我想要实现的是Command属性绑定到Class 1,而IsEnabled属性绑定到Class 2。

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

但是在尝试访问UserManagmentAdapter时似乎存在问题。 UserManagmentAdapter类与包含此MenuItem控件的项目不在同一项目中。所以我收到了错误

  

&#34; UserManagmentAdapter&#34; Windows演示文稿中不支持   基金会(WPF)项目

我要访问的属性:

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"); }
}

我的第2课:

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

我希望我已经说清楚了。 任何人都知道如何访问UserManagmentAdapter?

2 个答案:

答案 0 :(得分:1)

您需要在XAML中添加名称空间声明:

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

...其中“YourNamespace”是定义UserManagmentAdapter类的命名空间,“YourAssembly”是程序集的名称。

如果您的WPF应用程序项目中定义了UserManagmentAdapter类,即不在单独的程序集中,则应删除;assembly=YourAssembly部分:

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

答案 1 :(得分:0)

为什么不制作ViewModel的Class1Class2属性,然后访问XAML中的属性:

代码

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}"/>