试图在另一个ViewModel中访问ViewModel公共属性?

时间:2012-11-19 12:43:12

标签: wpf visual-studio-2010 c#-4.0 mvvm

我有2个viewmodels:

1)

public class TaskTrayViewModel<T> : ViewModelBase where T : IBlotterRow, new()
{
}

2)

public class BlotterCriteriaViewModel : ViewModelBase , IDataErrorInfo 
{ 
}

我正在尝试像BlotterCriteriaViewModel一样访问TaskTrayViewModel<T>个公共属性

public class BlotterCriteriaViewModel : ViewModelBase , IDataErrorInfo 
{
TaskTrayViewModel<IBlotterRow> _all;
    TaskTrayViewModel<IBlotterRow> All
    {
        get { return _all; }
        set { value = _all; }
    }
}

在执行上述操作时,会出现以下错误:'DMS.Common.Interfaces.Blotter.IBlotterRow'必须是具有公共无参数构造函数的非抽象类型,才能在泛型类型中将其用作参数'T'或方法'DMS.GUI.ViewModels.TaskTrayViewModel'。

请建议?如何纠正它?

3 个答案:

答案 0 :(得分:0)

删除new()通用约束,因为您无法使用new创建接口,实际上您无法创建任何接口。有关约束,请参阅this。您可能想要使用class

答案 1 :(得分:0)

您不能拥有这样定义的属性:

TaskTrayViewModel<IBlotterRow> _all;
TaskTrayViewModel<IBlotterRow> All
{
    get { return _all; }
    set { value = _all; }
}

因为您没有指定IBlotterRow的具体实现。如果您具有TaskTrayViewModel<T>类的具体实现,例如

public class MyImpl: TaskTrayViewModel<MyClass>

然后你可以将它作为另一个类中的属性。否则,您必须为包含所需属性的TaskTrayViewModel<T>定义非泛型基类,或者使BlotterCriteriaViewModel泛型并使用其类型参数定义属性:

public class BlotterCriteriaViewModel<T> : ViewModelBase , IDataErrorInfo 
{
    TaskTrayViewModel<T> _all;
    TaskTrayViewModel<T> All
    {
       get { return _all; }
       set { value = _all; }
    }
}

答案 2 :(得分:0)

我不明白,你究竟想做什么,但错误说(根据你的约束)要使用TaskTrayViewModel<T>泛型类型你需要非抽象类型和一个公共无参数构造函数类型参数:

public class MyBlotterRow : IBlotterRow { ... }

然后您可以将您的财产声明写为TaskTrayViewModel<MyBlotterRow> _all;