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

Silverlight 我应该为此使用触发器或行为吗?,silverlight,xaml,silverlight-4.0,silverlight-toolkit,Silverlight,Xaml,Silverlight 4.0,Silverlight Toolkit,我有一个抽象对象名为applicator,还有两种不同类型的对象从applicator继承而来,分别是Business和Individual。我有三个类,看起来像这样: public abstract class Applicant { ... } public class Individual : Applicant { ... } public class Business : Applicant { ... } 现在在DataGrid中,我想显示申请者对象的所有细节。当您选择

我有一个抽象对象名为applicator,还有两种不同类型的对象从applicator继承而来,分别是Business和Individual。我有三个类,看起来像这样:

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。

我不会使用任何一种:

  • 有两个视图(网格)-一个渲染单个详细信息,另一个渲染业务详细信息
  • 在RowDetailsTemplate内定义ContentControl并将其设为区域
  • 然后在主栅格的ViewModel中处理所选应用程序更改,以便根据所选应用程序的类型在区域中激活适当的视图
我认为您不需要行为或触发器,只需要数据绑定。有一个非常简单的介绍msdn中的数据绑定是什么

城市评估中的独特之处在于,您的datagrid没有一个而是两个不同的
数据模板
,您需要动态更改它们。我发现了一篇关于这个主题的博客帖子和silverlight.net论坛帖子:和


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

做同样的事情,这听起来是个好主意。我应该把SelectedApplicationEvent放在哪里,因为现在我有一个这样的申请人集合ObservableCollection?也许我甚至可以使用LoadingRowDetails来代替?如果您在viewmodel世界中,那么您就不会有事件-您应该将网格的SelectedItem绑定到viewmodel中的CurrentApplication属性。因此,当selection更改时,将自动调用属性上的set方法;但是获取异常“区域管理器不包含myRegion区域。”