0

プロパティ(MVVMパターン)observableCollectionをバインドするためにを使用するdataGridがあります。ItemsSourceしたがって、私のビューモデルには、observableCollectionmyCollection)であるプロパティがあります。ただし、このdataGridは、実行時に決定される2つの異なるタイプの情報を表示できます。

通常、私はこれでobservableCollectionを使用します:

ObservableCollection<myType> myCollection = new ObservableCollection<myType>();

しかし今、私は必要なタイプを示す文字列をパラメータとして持っているので、次のようなことをしたいと思います。

if(parameter == "TypeA")
{
    myCollection = new ObservableCollection<TypeA>();
}

if(parameter == "TypeB")
{
    myCollection = new ObservableCollection<TypeB>();
}

それは可能ですか?

4

2 に答える 2

1

TypeAとTypeBを共通の基本クラスまたはインターフェイスから派生させた場合、同じコレクションを保持できます。

ただし、2つの異なるコレクションが必要な場合は、コレクションプロパティを上げて、変更されたタイプについて通知することができます。

IEnumerable MyCollection
{
    get
    {
        if(CurrentType == typeof(TypeB)
            return myTypeBCollection;
        else if(CurrentType == typeof(TypeA)
            return myTypeACollection;
    }
}

したがって、ビュー内のMyCollectionをItemsSourceにバインドし、プロパティが変更されたことを通知します。

DataTemplateSelectorが役立つ別のDataTemplateが必要になる場合があることに注意してください。

于 2012-06-05T14:55:42.770 に答える
0

実行時にObservableCollectionを宣言するには、正確なタイプの代わりに動的キーワードを使用するだけです

private ObservableCollection<dynamic> DynamicObservable(IEnumerable source)
    {

        ObservableCollection<dynamic> SourceCollection = new ObservableCollection<dynamic>();

        SourceCollection.Add(new MobileModelInfo { Name = "iPhone 4", Catagory = "Smart Phone", Year = "2011" });

        SourceCollection.Add(new MobileModelInfo { Name = "S6", Catagory = "Ultra Smart Phone", Year = "2015" });

        return SourceCollection;

    }

public class MobileModelInfo
{
    public string Name { get; set; }
    public string Catagory { get; set; }
    public string Year { get; set; }
}
于 2015-11-16T12:59:49.767 に答える