2012-02-14 15 views
0

バインディングを使用してViewModelからTemplateにデータを転送していますが、データをTeampleからViewModelに転送したいとします。
MVVMでバインディングとテンプレートを取得する

<TabControl Grid.Row="2" ItemsSource="{Binding List}" IsSynchronizedWithCurrentItem="True"> 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}" /> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 

     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <ContentControl Content="{Binding Content}"/> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 

私は(結合して)現在のTabItemを作成するのTabIndexを取得したいです。
どうすればいいですか?

+0

あなたがバインドするListプロパティのコードを投稿してください。 – blindmeis

答えて

1

テンプレートからViewModelに渡そうとしているプロパティがわかりません。しかし、基本的にテンプレートからビューモデルに値を渡したい場合は、 "OneWayToSource"または "TwoWay"バインディングモードを使用します。

私が正しくundestoodと何があなたのビューモデルに渡すtyringされていることは、現在選択されてのTabItemの指標である、あなたは次のようにそれを行うことができれば -

<TabControl Grid.Row="2" ItemsSource="{Binding List}" IsSynchronizedWithCurrentItem="True" SelectedIndex={Binding SelectedIndex, Mode="OneWayToSource"> 

(もがなければならないことに注意してくださいは、

MSDNによれば、このプロパティのバインドモードはデフォルトで "TwoWay"ですが、バインディングモードを指定する必要はありません。

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedindex.aspx

+0

しかし、TabItemのTabIndexも必要です。どのようにTabItemを現在作成しているTabIndexを取得できますか? – Never

+0

申し訳ありませんが、分かりません。 「現在TabItemを作成しています」とはどういう意味ですか? – Dror

+0

私はItemsSourceをバインドしていますので、新しいTabItemを追加するために 'listOfTab.Add(tab1);'を使用し、この項目からIndexを取得します。 – Never

1

これを実行する最も簡単な方法は、あなたがtrueにIsSynchronisedToCurrentItemを設定しているので、公開するICollectionViewにフックすることです。

テストされていない例

public ObservableCollection<object> List {get; set;} 

public int SelectedIndex 
{ 
    get { return CollectionViewSource.GetDefaultView(List).CurrentPosition; } 
    set { CollectionViewSource.GetDefaultView(List).MoveCurrentTo(value); } 
} 

その後、あなたはあなたのViewModelでSelectedIndexプロパティにバインドすることができます。

これがうまくいかない場合は、通常のObservableCollectionの代わりにViewModelのListCollectionViewに直接バインドし、上記のコードのCollectionViewSource.GetDefaultView(List)をMyListCollectionViewに置き換えます。

関連する問題