0

Applicantという抽象オブジェクトと、BusinessとIndividualというApplicantから継承する2つの異なるタイプのオブジェクトがあります。したがって、次のような3つのクラスがあります。

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>

これを達成するためにトリガーまたはビヘイビアーを使用する必要があるかどうかわかりませんか?みんな助けてくれてありがとう!参考までに、PrismでSilverlight4.0を使用しています。

4

2 に答える 2

0

私はどちらも使用しません:

  • 2 つのビュー (グリッド) を用意します。1 つは個人の詳細をレンダリングし、もう 1 つはビジネスの詳細をレンダリングします。
  • RowDetailsTemplate 内に ContentControl を定義し、リージョンにします。
  • 次に、メイン グリッドの ViewModel で SelectedApplicant の変更を処理し、選択した応募者のタイプに応じてリージョンで適切なビューをアクティブにします。
于 2010-05-05T17:46:39.943 に答える
0

ビヘイビアーもトリガーも必要ではなく、データバインディングが必要だと思います。msdn documentationには、データバインディングとは何かという非常に簡単なイントロがあります。

あなたの引用でユニークなことは、データグリッドに1つではなく2つの異なるものがDataTemplatesあり、それらをその場で変更する必要があることです。その件に関するブログ投稿とsilverlight.netフォーラムのスレッドを見つけました:Changing Data-Templates at run-time from the VM and forum

最初のものは非常に単純なコードビハインド ロジックを使用し、フォーラムのものはIValueConverter.

于 2010-05-05T20:17:52.907 に答える