1

いくつかのタブを持つタブ コントロールがあります。タブが選択されると、タブのコンテンツを対応するビュー モデルに設定します。

また、他のすべてのビュー モデルの派生元である基本ビュー モデル用に定義された DataTemplate もあります。

    <DataTemplate DataType="{x:Type vm:BaseViewModel}">
        <view:BaseView/>
    </DataTemplate>

このようにして、ほぼ同一のビュー モデルが同じベース ビューを使用して表示されます。

BaseView はユーザー コントロールです。BaseView には、Infragistics XamDataGrid が定義されています。すべてのビュー モデルに対してこのグリッドのインスタンスが 1 つだけ作成されているようです。つまり、タブを何度でも切り替えることができますが、ユーザー コントロールが最初から再作成されることはありません。

DataTemplates と組み合わせた場合、WPF はユーザー コントロールの有効期間をどのように処理しますか?

私が解決しようとしている問題は、BaseView の xaml で、次のように XamDataGrid で Field を定義したことです。

<igDP:XamDataGrid.FieldLayouts>
  <igDP:FieldLayout>
    <igDP:FieldLayout.FieldSettings>
      <igDP:FieldSettings DataValueChangedNotificationsActive="true" 
              AllowCellVirtualization="False"
                          AllowResize="True"
                          AllowRecordFiltering="True"/>
      </igDP:FieldLayout.FieldSettings>
      <igDP:Field Name="IsDirty" Visibility="Collapsed"/>
  </igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>

IsDirty 列 (すべてのビュー モデルに IsDirty プロパティがあります) は、グリッドが最初に表示されたときにのみ正しく折りたたまれます。別のタブをクリックすると、グリッドのデータ ソースが変更され、グリッドによって新しい FieldLayout が作成され、IsDirty の Collapsed 設定が取得されません。その結果、IsDirty 列が表示されます。ユーザー コントロールを完全に再作成することができれば、この問題を回避できると考えました。

4

1 に答える 1