1

MVVM フレームワークを使用して WPF アプリケーションを作成しています。

基本クラス「MessageParentBase」からすべて継承するいくつかのクラスがあります

public class ChatMessage : MessageParentBase
{
}

public class CargoMessage : MessageParentBase
{
}

ViewModel はすべて、基本クラス「ParentMessageWindowBaseViewModel」から再度継承します。

public class UserControlChatViewModel : ParentMessageWindowBaseViewModel
{
}

public class UserControlCargoViewModel : ParentMessageWindowBaseViewModel
{
}

今私がやりたいことは、「ParentMessageWindowBaseViewModel」クラスに監視可能なコレクションを持つことです

abstract internal ObservableCollection<MessageParentBase> GridData
{
    get; set;
}

そこにあるので、「ParentMessageWindowBaseViewModel」レベルでジェネリックメソッドを使用できますが、子クラスでは、より具体的なコレクションを宣言したいと考えています

internal override ObservableCollection<ChatMessage > GridData
{
    get { return _GridData; }
    set
    {
        _GridData = value;
    }
}

Visual Studioは、「MessageParentBase」のタイプとして宣言する必要があると言っています。

現在苦労しているので、どうすればこれを達成できるかを誰かに説明してもらえますか。

助けてくれて本当にありがとうございます。

4

2 に答える 2

2

ObservableCollection< ChatMessage>ObservableCollection< MessageParentBase>と同じではないため、オーバーライドできません。

これは次のように使用できます。

public class MessageParentBase
{
}

public class ChatMessage : MessageParentBase
{
}

public abstract class ParentMessageWindowBaseViewModel<T> where T : MessageParentBase
{
    abstract internal ObservableCollection<T> GridData
    {
        get;
        set;
    }
}

public class Child : ParentMessageWindowBaseViewModel<ChatMessage>
{

    internal override ObservableCollection<ChatMessage> GridData
    {
        get;
        set;
    }
}

ただし、すべての子を 1 つのリストに格納することはできません。したがって、ジェネリック プロパティの継承に関する問題は修正されません。

于 2013-08-09T09:16:38.417 に答える
0

プロパティ GridDataを と宣言するクラスでabstract、なぜバッキングフィールド _GridDataも導入するのですか? そうしないでください。

プロパティを にしたい場合はabstract、サポート フィールドをそこに置かないでください。「高」レベル (基本クラス) でプロパティを実装する場合は、abstractそこから修飾子を削除します。

于 2013-08-09T08:58:16.423 に答える