2012-03-28 15 views
0

実際にMainWindow.xamlであるラッパーUIを含むWPFアプリケーションで作業していて、そのコンテンツ(ContentPresenter)が毎回変更されるユーザーはアプリケーションの別のセクションに移動することを選択します。毎回初期化されないWPFの静的ビューを作成する

ユーザーがメインコンテンツに戻ったときに、アプリケーションは毎回それを初期化せずに、何らかの形でメモリに保存し、ユーザーが「ホーム」ボタンをクリックしたときに復元するようにします。

現在の状態では、「ホーム」セクションに戻ったときにホームビューが何度も何度も初期化され、アプリケーションがちょっと遅くなります。私の質問はこれです:私は速くそれを復元することができるように何らかの形でメモリにそのユーザーコントロールを保持する方法はありますか?

ありがとうございます!

+1

あなたは何をしようとしているのか正確にはわかりにくいですが、別のコントロールに「ホーム」コンテンツを残して隠すことはできませんでしたか? –

+0

ユーザが押したボタンに応じて置き換えられるコンテンツは、実際にはMainWindow.xamlの 'ContentPresenter'にバインドされます。ユーザが別のワークフローボタンをクリックしたときにコンテンツがユーザによってクリックされたものに置き換えられ、ユーザーが「ホーム」画面に戻るたびに、「ホーム」コンテンツを非表示にして廃棄したり再構築したりしないようにしたい。バインディングを使用している場合、どのように処理しないで非表示にすることができますか? –

+0

UserControlをプライベート変数に保存することはできませんか? – Paparazzi

答えて

0

最終的にContentControlItemsControlに移動し、アクティブなコンテンツコントロール以外のすべてのコンテンツコントロールを非表示にすることにしました。私は、実際のコンテンツとコンテンツは、現在の1とtrueそれがある場合でないときfalseに設定されている別のVisibility性質を持っている私のViewModelに

<ItemsControl ItemsSource="{Binding ViewModels}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Grid /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <ContentControl Visibility="{Binding Visibility}" Content="{Binding ViewModel}" /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

は、ここに私のコードの抜粋です。

すべてのヘルパーに感謝します!

+0

上記のとおり、私はその回避策でこの問題を修正しました。あなたの助けを借りてくれてありがとう! :) –

1

@Mattが示唆しているように、隠蔽はオプションです。他の方法は、フレームワーク(Prism、Caliburn、Caliburn.Micro、...)のすばらしい世界を探検することです。

これらはWPFアプリケーションの管理に非常に役立ちます。

本質的には、ロードされたビューモデルを追跡するmainviewmodelまたはmainview内のコレクションであるViewModelへの参照を保持する必要があります。

関連する問題