2011-12-21 16 views
0

私はTabControlを使用するWPFアプリケーションを持っています。各TabItemには、データグリッドが含まれます。アプリケーションが起動すると、デフォルトで読み込まれて "Accounts"データグリッドを表示するTabItemが1つあります。このデータグリッドは、アカウント情報のみを表示します。ユーザーは新しいタブを追加することができます。追加される各タブごとに、同じデータグリッドをロードする必要があります。これは、Accounts TabItemに使用されるのと同じデータグリッドではありません。新しいデータグリッドはトランザクションの入力に使用されます。新しく追加した各TabItemで使用できるデータグリッドはどのように定義できますか?最初のTabItemの元のDataGridとは異なりますか?複数のTabItemでデータグリッドを再利用

答えて

0

あなたが望むものがわかっていれば、最初のtabitemの場合はデフォルトDataGrid、それから新しいときはそれぞれtabitemと同じdatagridです。

ここでの問題は、単一のDataGridは、2つのTabItemsの一部になることはできません。したがって、最初に行う必要があることは、DataGridをスコープ内で宣言して、コードの背後でアクセスできるようにすることです。次に、ユーザーが新しいtabitemを初めて追加するときは、初めてにtab itemを追加し、contentDataGridに設定します。ユーザーが新しいタブの追加を再度クリックすると、DataGridのタブ項目のcontentを削除し、次ににdatagridを追加します。また、selection changeのタブのイベントを処理する必要があります。そのイベントの中では、最後に選択したアイテムからDataGridを削除し、新しく選択したアイテムに入れなければなりません。

私はあなたが本当に別のタブ項目のことのために、この同じデータグリッドを必要とするかが、この場合は他の可能な解決策

0

については、このアプローチを実装する前に、私はMVVMパターンを使用してお勧めしたいと思わないことを確認していません。

メインViewModelにpublic ObservableCollection<object> Itemsプロパティを定義させてください。 TabControlItemsSourceItemsにバインドします。

はアカウントTabItemに表示されなければならないDataGridが含まれていAccountsViewModelためDataTemplateを定義します。

取引TabItemに表示されなければならないDataGridが含まれていTransactionsViewModelためDataTemplateを定義します。 Account Tab

0

XAMLDataGridに、彼らは実行時に生成されたとして、それがコードからそれらを管理する方が良いでしょう、のは、他のタイプのAccountDataGrid

を言わせて追加します。

TabItemsによって共有されるDataGridオブジェクトを作成し、あなたが例えば、このような何かを行うことができた後のは、SharedDataGrid

を言わせて:TabItemクラスカスタム定義

public sealed class CustomTabItem : TabItem 
{ 
} 

およびそのクラス内のオーバーライド後

protected override void OnInitialized(EventArgs e) 
{ 
    //assign shared SharedDataGrid to the content of TabItem 
} 

この方法では、実際にSharedDataGridに、作成して初期化したTabItemの内容を割り当てます。

が必要です。

関連する問題