0

我有一个称为申请人的抽象对象和从申请人继承的两种不同类型的对象,称为业务和个人。所以我有三个看起来像这样的类:

public abstract class Applicant
{
...
}

public class Individual : Applicant
{
  ...
}

public class Business : Applicant
{
  ...
}

现在在 DataGrid 中,我想显示申请人对象的所有详细信息。当您选择一行时,我想将企业或个人的详细信息显示为内部网格。像这样的东西

<DataGrid>
     <DataGrid.Columns>
          <!--Show different columns -->
     </DataGrid.Columns>
     <DataGrid.RowDetailsTemplate>
         <!--Show if Individual -->
         <DataGrid>
              <DataGrid.Columns>
                <DataGridTextColumn Header="First Name" ... />
                <DataGridTextColumn Header="Last Name" ... />
              </DataGrid.Columns>
          </DataGrid>
          <!--Show if business -->
          <DataGrid>
              <DataGrid.Columns>
                <DataGridTextColumn Header="Business Name" ... />
                <DataGridTextColumn Header="Tax id" ... />
              </DataGrid.Columns>
          </DataGrid>
     </DataGrid.RowDetailsTemplate>
</DataGrid>

现在我不确定是否需要使用触发器或行为来完成此操作?感谢大家的帮助!仅供参考,我将 Silverlight 4.0 与 Prism 一起使用。

4

2 回答 2

0

我不会用户使用:

  • 有两个视图(网格) - 一个呈现个人详细信息,另一个呈现业务详细信息。
  • 在 RowDetailsTemplate 内定义一个 ContentControl 并使其成为一个区域。
  • 然后在主网格的 ViewModel 中处理 SelectedApplicant 更改,以便根据所选申请人的类型激活该区域中的正确视图。
于 2010-05-05T17:46:39.943 回答
0

我认为您既不需要行为也不需要触发器,而是需要数据绑定。在 msdn文档中有一个很棒的简单介绍什么是数据绑定。

您引用的独特之处在于,您的数据网格没有一个,而是两个不同DataTemplates,您需要随时更改它们。我找到了关于该主题的博文和 silverlight.net 论坛主题:从 VM和论坛更改运行时的数据模板

第一个使用一些非常简单的代码隐藏逻辑,论坛中的一个使用IValueConverter.

于 2010-05-05T20:17:52.907 回答