0

私はWPFを学んでいるところなので、我慢してください。

次のような従業員オブジェクトの観察可能なコレクション(簡潔にするためにここでは非常に簡略化されています)を含むビューモデルがあります。

public class  Employee
{
  public string Name { get; set; }
  public string Title { get; set; }
}

私のC#WPFアプリケーションでは、この監視可能なコレクションからの情報を、単純なデータバインディングを介してビューのタブコントロールに表示しています。これまでのところ簡単なもの。私の要件は、ユーザーが関心のある従業員からの情報のみを表示する新しいタブを動的に追加できることと、アプリケーションが実行されるたびに従業員データの新しいビューが保存および再ロードされることです。

したがって、私のユーザーが、ソフトウェアエンジニアである従業員のみを表示する新しいタブを追加したいとします。フィルタ基準を選択する方法を提供してから、選択したフィルタ基準に一致する従業員を表示する新しいタブをタブコントロールに追加する必要があります。新しく作成されたタブの従業員情報のカスタムビューは、アプリケーションを実行するたびに保存して再作成する必要があります。

完全なコード例は必要ありませんが、それは本当に役に立ちます。私が欲しいのは、私が情報を得るためにグーグルに行くことができるように、アプローチのためのいくつかの提案です。この問題を解決するのにどのテクニックが最適かわかりません。動的に作成されたデータテンプレートまたはカスタムCollectionViewSourceを考えていますが、その情報を保存して再読み込みする必要があるので、動的に作成されたデータテンプレートを保存して、アプリケーションの読み込み時に使用しますか?

4

2 に答える 2

1

私が理解していることから、タブにはそれぞれフィルターと、このフィルターに基づいてロードされた監視可能なコレクションがあります。

この場合、考えられる解決策の 1 つは、タブを表すビュー モデル (EmployeesViewModel) を定義することです。このビュー モデルには、フィルターと監視可能なコレクションのプロパティに加えて、監視可能なコレクションを保存/変更するためのその他のメソッドが含まれます。

public class EmployeesViewModel {
    public Filter Filter { get; set;}
    public ObservableCollection<Employee> Employees { get; set;}
    public Employee SelectedEmployee { get; set;}
    public RoutedCommand SaveSelectedEmployee { get; set;}
    …
}

これができたら、( ISerializableを実装して) クラスをシリアライズ可能にします。コレクションのコンテンツではなく、フィルター条件のみをシリアル化する必要があります。

アプリケーションをシャットダウンするとき、またはタブ ビューアー モジュールを破棄するときに、タブ コレクションを反復処理し、関連するビュー モデルを取得して、それぞれをシリアル化します。アプリケーション(またはタブビューアモジュール)を起動すると、逆シリアル化されたビューモデルを使用して各タブが再作成されます

于 2013-02-08T13:53:41.897 に答える
0

あなたがする必要があるのは、TabControlテンプレート(http://msdn.microsoft.com/en-us/library/ms754137(v=vs.85).aspx)を作成することです。そして、「右端」タブにボタンがあります。これで、Webブラウザなどの新しいタブを追加できます。

テンプレートを作成するのがまだ初めての場合は、ボタンテキストボックス、エキスパンダーの順にテンプレートを作成することをお勧めします。

テンプレートはWPFの動作の中心であるため、時間をかけて練習し、慣れてください。

起動時などの情報の保存と読み込みについては、「シリアル化」を検索します。これは、基本的にC#クラスを取得し、ディスクから書き込み/読み取りできる「ストリーム」に変換するプロセスです。

于 2013-02-08T13:39:10.977 に答える