2011-07-14 13 views
1

WPF MVVMでマスター詳細ビューを実装しようとしています。WPF MVVM DataGridとTabControlを持つマスター詳細ビュー

私のビューモデルでは、私は観察可能な "原因"のコレクションを持っています。各原因には、「解決策」の観測可能なコレクションがあります。

私は編集可能なデータグリッドを原因にバインドしています。正常に動作しています。しかし、ユーザーがDataGridの行を選択すると、そのユーザーがTabControlで関連するソリューションを表示できるようにしたいと考えています。

どうすればいいですか? ViewModelにプロパティCurrentCauseを作成し、それをSelectedItemにバインドする必要があります。 TabControlではCurrentCause.Solutionsにバインドできます。

これは最適なアプローチですか?お知らせ下さい。ありがとう!!

答えて

2

TabControlのItemsSourceを要素バインディングを使用してDataGridのSelectedItemにバインドできます。

<TabControl ItemsSource="{Binding ElementName=myDataGrid, Path=SelectedItem.Solutions}"> 
+0

本当に? DataContextを別のコントロールにもバインドすることは可能ですか? DataContext = {Binding Path = CauseControlName.SelectedItem}を使用する必要がありますか? – ganeshran

+0

はい、あなたはDataContextのをバインドすることができますが、タブなどの各ソリューションを表示したい場合、あなたは、私はそれが仕事:(私TabConrolはとして完全に空白来るをdoesntの – devdigital

+0

感謝をバインドする必要があります。Iを私もこの構文を試してみました – ganeshran

2

あなたはTrueにIsSynchronizedWithCurrentItemを設定し、thisような何かを行うことができます。

+0

ありがとう、私は今それを試しています – ganeshran

+0

親スタックパネルのDataContextを設定しようとしました しかし、それは機能しません。 – ganeshran

+0

コンソールにバインドエラーがありますか? – anivas

1

私はDataGridを原因のリストに、SelectedItemをYourCurrentCauseに、そしてTabControlをソリューションにバインドします。その後、MVVMにうまく収められたものがすべてあります。

private Cause _currentCause; 
public Cause CurrentCause 
{ 
    get { return _currentCause; } 
    set 
    { 
     if (_currentCause == value) return; 
      CurrentSolution = _currentCause.Solutions; //However you do this... 
     _currentCause = value; 

     RaisePropertyChanged("CurrentCause"); 
    } 
} 

private ObservableCollection<Cause> _causes; 
public ObservableCollection<Cause> Causes 
{ 
    get { return _causes; } 
    set 
    { 
     _causes = value; 
     RaisePropertyChanged("Causes"); 
    } 
} 
private ObservableCollection<Solution> _solutions; 
public ObservableCollection<Solution> Solutions 
{ 
    get { return _solutions; } 
    set 
    { 
     _solutions = value; 
     RaisePropertyChanged("Companies"); 
    } 
} 



<dg:DataGrid ItemsSource="{Binding Causes}" SelectedItem="{Binding CurrentCause}"... 
+0

ありがとう、私は余分なプロパティなしでこれを達成することができました。しかし、私はいくつかの他の問題のためにする必要があります:( – ganeshran

関連する問題