0

我正处于开发允许用户在集合中创建、修改和删除项目的应用程序的开始阶段。集合中的项目将具有不同的属性,并允许根据项目类型的选择输入这些属性。

为了给你一个问题的例子,这里有一些基本类及其属性列表。
类型必须是文本、音频或视频之一。
文本 - 名称、类型、说明、长度、作者
音频 - 名称、类型、说明、长度、文件格式、曲目编号、艺术家、专辑等
视频 - 名称、类型、说明、长度、文件格式、曲目编号、艺术家等。

如您所见,每个字段都略有不同。选择类型后,它会更改用户输入的可用属性。不要太拘泥于课程和方法,因为课程只是一个例子。用户要求数据采用类似网格的格式以提高可读性。对于大多数用户数据,DataGrid 中的条目之间只有一两条信息会发生变化,因此扫描和查找属性变化的能力很重要。

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 回答