私はたくさんのサンプルを作成しましたが、私の問題についてはどこにも遭遇しませんでした。つまり、各グループが完全に異なるコレクションで構成されていることを除いて、2つのグループで構成されるグループ化されたGridViewを作成したいと思います。たとえば、最初のグループでは動物、2番目のグループでは車にしたいと思います。
また、これらのグループのそれぞれに異なるテンプレートがあったことを望みます;)
両方の内部コレクションアイテムを共通の基本クラスから派生させます。これを行ったとき、ItemBaseクラスがあり、Event、Story、およびPartyクラスはすべてItembaseから派生していました。
次に、私のグループコレクションアイテムには、それぞれObservableCollectionのアイテムの定義が含まれていました。(今考えてみると、暗黙の基本型としてオブジェクトを使用することもできたと思いますが、使用しませんでした)コーディングすると、これには実際に派生クラスが入力されました。
Items.Add(new Event { Title = "I am an event" };
グリッドにアイテムを表示するときは、ItemTemplateSelectorから派生する新しいクラスを作成し、SelectTemplateCore(オブジェクトアイテム、DependencyObjectコンテナー)メソッドをオーバーライドする必要があります。私の論理は単純でした
if(item is Event) { return EventTemplate; }
else if(item is Story) { return StoryTemplate }
else { return DefaultTemplate; }
(私のパーティーアイテムはデフォルトのテンプレートを使用しました。)
ObservableCollectionを作成し、コレクションアイテムをプッシュします。このような:
public class ScreenGroupModel
{
private ObservableCollection<object> _groupItems = new ObservableCollection<object>();
public ObservableCollection<object> GroupItems
{
get { return this._groupItems; }
}
public ScreenGroupModel()
{
}
public ObservableCollection<object> GetScreenGroups()
{
_groupItems.Add(new Class1);
_groupItems.Add(new Class2);
return _groupItems;
}
}
このサンプル、簡単なコレクションを示しています。DataTemplateSelectorsを使用できます。あらゆる種類のクラスで、テンプレートを選択します。ObservableCollection->「オブジェクト」タイプは重要です。なぜなら、オブジェクトは基本型だからです。あらゆる種類のクラスを追加できます。よろしく;)