0

タブコントロールがあり、タブアイテムのコレクション内にあります。選択した値のヘッダーをビューモデルのプロパティにバインドして、タブがいつ選択されたかを確認したいと思います。

私の思考プロセスにより、私は次のことを試みました。

<TabControl x:Name="TabControl" SelectedValue.Header="{Binding SelectedTab}">

これは機能しません-おそらくSelectedValueのタイプがHeaderedContentControlではないためです(ただし、このインスタンスでは常に存在します)。

上記を実行できるように、XAMLインラインでキャストすることは可能ですか?

または、誰かが同じ種類のことをエレガントに効果的に達成するための別の方法を提案できますか?XAMLのコードビハインドを変更したくありません。

4

2 に答える 2

2

次のコードは私にとってはうまくいきます...

C#:

public class MyTabItemData     {
     public int Index { get; set; }
     public string Title { get; set; }
} 

public class MyTabControlViewModel {
     public List<MyTabItemData> TabItemsData { 
         get {
             //return list of tab items data.
         } 
     }

     public ICollectionView TabItemsDataView {
          get {
              return CollectionViewSource.GetDefaultView(TabItemsData);
          }
     }

     public MyTabItemData MyCurrentTabItemData {
          get {
              return TabItemsDataView.CurrentItem as MyTabItemData;
          }
     }
}

XAML:

<TabControl ItemsSource="{Binding TabItemsDataView}" 
            IsSynchronizedWithCurrentItem="True">
     ....
</TabControl>
于 2012-12-12T11:55:58.257 に答える
1

SelectedValueにバインドし、コンバーターを使用してヘッダーを取得する代わりに、<TabControl x:Name="TabControl" SelectedValue.Header="{Binding SelectedTab}"> 次のようにします。

<TabControl x:Name="TabControl" SelectedValue="{Binding Path=SelectedTab, Converter={StaticResource TabItemToHeader}}">

あなたのコンバーターは次のようになります

public class TabItemToHeaderConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((TabItem)value).Header
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
} 

Headerは添付プロパティではないため、 を介してバインドすることはできませんSelectedValue.Header="{}"

于 2012-12-12T11:57:11.903 に答える