1

ListView に 2 種類の項目を表示しています。

abstract class Item
{
    string ID { get; }
}

class ItemTypeA : Item
{
    string Value { get; set; }
}

class ItemTypeB : Item
{
    string ValueOne { get; set; }
    string ValueTwo { get; set; }
}

(もちろん、それ以上のことはほとんどありません。さまざまなインターフェイスを使用しますが、例として、それを省略し、それらの型の「最終的な」構造のみを示しました)

したがって、基本的に ListView には常に ID 列があり、他の列は項目の種類によって異なります。

of である種の動的な列を使用することを考えていました。ここでGridViewListView.View、基になるビュー モデルがどの列 (または特定のアイテム タイプの属性) を表示するかを決定します。

編集についても同様です。編集領域には、ItemTypeA用に 1 つ、 ItemTypeBTextBox用に 2 つだけ存在する必要があります。

基本的に、私の質問は、これを解決する方法ですが、項目タイプごとに完全に個別のビュー (ListView と編集領域を含む) を作成することを避けようとしています。

また、アイテムの値には大量のテキスト (複数行のテキストであっても) が含まれる場合があり、ユーザーが編集するのが難しいため、ListView でアイテムを直接編集することは避けたいと考えています。

(私は Caliburn.Micro を使用していますが、それは問題とはあまり関係ありません)。

4

1 に答える 1

0

ListViewItem に独自の DataTemplateSelector を提供できます。

public class MyTemplateSelector : DataTempolateSelector
{
     public override DataTemplate SelectTemplate(object item, DependencyObject container)
     {
        // here select temaplate, from dictionary for example, using item.GetType()
     }
}

Item ビュー モデル クラス:

abstract class Item
{
    string ID { get; }

    MyTemplateSelector TemplateSelector { get; }
}

あなたの ListViewItem スタイル:

于 2013-08-06T02:05:48.847 に答える