0

私は、ユーザーがコレクション内のアイテムを作成、変更、および削除できるようにするアプリケーションの開発の初期段階にいます。コレクション内のアイテムには異なるプロパティがあり、アイテムの Type の選択に基づいてそれらのプロパティに入力できます。

問題の例として、いくつかの基本的なクラスとそのプロパティのリストを示します。
タイプは、テキスト、オーディオ、またはビデオのいずれかである必要があります。
テキスト - 名前、タイプ、説明、長さ、作成者
オーディオ - 名前、タイプ、説明、長さ、ファイル形式、トラック番号、アーティスト、アルバムなど
ビデオ - 名前、タイプ、説明、長さ、ファイル形式、トラック番号、アーティストなど

ご覧のとおり、フィールドはそれぞれわずかに異なります。Type を選択すると、ユーザー入力に使用できるプロパティが変更されます。クラスは単なる例であるため、クラスやアプローチにこだわりすぎないでください。ユーザーは、読みやすくするためにデータをグリッドのような形式にすることを要求しています。ほとんどのユーザー データでは、DataGrid のエントリ間で 1 つまたは 2 つの情報のみが変更されるため、プロパティの変更をスキャンして検出する機能が重要です。

これのWPF設計のための最良のアプローチは何ですか?
異なるアイテムを単一のデータグリッドのようなコントロールにキャストできますか?
タイプを選択すると、汎用アイテムを特定のアイテムにキャストできますか?

4

1 に答える 1

0

データグリッドに表示するラッパー クラスを作成するだけです。

public class Wrapper
{
    public TypeEnum Type { get; set; }
    public string Name { get; set; }
    // other common props
    public string CustomProperty1 { get; set; }

    public object ConvertToRealObject()
    {
        switch(this.Type)
        {
            case TypeEnum.Audio:
                return new Audio { Name = this.Name, Album = this.CustomProperty1 }
            /* other type handling */
        }
    }
}

XAML で、データグリッドにテンプレート列を作成します。

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock x:Name="tb" Text="{Binding CustomProperty1}" Visibility="Collapsed" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Type}" Value="Audio">
                    <Setter Target="tb" Property="Visibility" Value="Visible" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

それだけです。

于 2012-07-26T08:12:55.893 に答える