我正处于允许用户创建,修改和删除集合中项目的应用程序的开发阶段。集合中的项目将具有不同的属性,并允许根据项目类型的选择为这些属性提供输入。
为了举例说明问题,这里有一些基本类及其属性列表
类型必须是文本,音频或视频之一
文本 - 名称,类型,描述,长度,作者
音频 - 名称,类型,描述,长度,FileFormat,曲目#,艺术家,专辑等
视频 - 名称,类型,描述,长度,FileFormat,Track#,艺术家等。
如您所见,每个字段的字段略有不同。选择“类型”后,它会更改用户输入的可用属性。不要太沉迷于类和方法,因为类只是一个例子。用户请求数据采用类似网格的格式以便于阅读。对于大多数用户的数据,DataGrid中的条目之间只会有一两条信息发生变化,因此扫描和查找属性变化的能力非常重要。
WPF设计的最佳方法是什么?
可以将不同的项目转换为单个数据网格控件吗?
一旦选择了类型,我能将通用项目转换为特定项目吗?
答案 0 :(得分: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中,在datagrid中创建模板列:
<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>
就是这样。