我应该使用触发器或行为吗?

时间:2010-05-05 16:03:47

标签: silverlight xaml silverlight-4.0 silverlight-toolkit

我有一个名为Applicant的抽象对象和两个不同类型的对象,它们从申请人继承,称为Business和Individual。所以我有三个类看起来像这样:

public abstract class Applicant
{
...
}

public class Individual : Applicant
{
  ...
}

public class Business : Applicant
{
  ...
}

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

<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。

2 个答案:

答案 0 :(得分:0)

我的用户都不使用:

  • 有两个视图(网格) - 一个呈现个人详细信息,另一个呈现业务详细信息。
  • 在RowDetailsTemplate中定义ContentControl并将其设为区域。
  • 然后在ViewModel中处理主网格中的SelectedApplicant更改,以便根据所选申请人的类型激活区域中的正确视图。

答案 1 :(得分:0)

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

你的cituation中唯一的一点是你的数据网格没有一个而是两个DataTemplates,你需要动态更改它们。我找到了关于该主题的博客帖子和silverlight.net论坛帖子:Changing Data-Templates at run-time from the VMforum

第一个使用一些非常简单的代码隐藏逻辑,论坛中的一个使用IValueConverter做同样的事情。