2012-11-19 318 views
0

我有2周的ViewModels:嘗試訪問另一個ViewModel中的ViewModel公共屬性?

1)

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

2)

public class BlotterCriteriaViewModel : ViewModelBase , IDataErrorInfo 
{ 
} 

我想一邊做訪問TaskTrayViewModel<T>公共屬性在BlotterCriteriaViewModel這樣

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

以上,以下錯誤是即將到來:'DMS.Common.Interfaces.Blotter.IBlotterRow'必須是一個帶有公共無參數構造函數的非抽象類型,以便在泛型類型或方法'DMS.GUI.ViewModels.TaskTrayViewModel'中將其用作參數'T' 。

請建議?如何糾正它?

+1

您可能想要切換此;)set {value = _all; }來設置{_all = value; } – dowhilefor

回答

0

刪除new()通用約束,因爲您無法使用new創建接口,實際上您無法創建任何接口。有關約束,請參閱this。你可能想使用class

+0

試圖刪除新的()但出現了多個錯誤。 – Tarun

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; } 
    } 
} 
0

我不明白,究竟是什麼你想這樣做,但錯誤說(根據您的約束),要使用TaskTrayViewModel<T>泛型類型,你需要非抽象類型具有公共的無參數的構造函數爲你的類型參數:

public class MyBlotterRow : IBlotterRow { ... }

然後,你可以寫你的財產聲明爲TaskTrayViewModel<MyBlotterRow> _all;

相關問題