2012-12-12 40 views
0

我有一個tabcontrol,並在tabitems集合中。我想將selectedvalue的頭部綁定到我的viewmodel中的一個屬性,所以我知道何時選中了一個選項卡。如何將TabControl的selectedvalue(標題)綁定到視圖模型上的屬性

我的思維過程促使我嘗試以下方法:

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

這不工作 - 可能是因爲的SelectedValue不是類型HeaderedContentControl(儘管它總是會在這種情況下)。

是否有可能在XAML內嵌內容,以便我可以執行上述操作?

或者任何人都可以提出另一種方式來有效地達到同樣的東西優雅?我不想更改XAML的代碼隱藏。

回答

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> 
+0

好的解決方案謝謝 – Shumii

1

而不是<TabControl x:Name="TabControl" SelectedValue.Header="{Binding SelectedTab}"> 結合的SelectedValue和使用轉換器像這樣得到標題:

<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="{}"綁定到它。

+0

是的,我曾想過這種方式,但認爲會有像內聯XAML演員(我不認爲有)。 – Shumii

+0

轉換器不是必需的,這工作正常:Text =「{Binding Path = SelectedItem.Header,ElementName = xxx}」 –

相關問題