0

我有一个 tabcontrol 和一个 tabitems 集合。我想将 selectedvalue 的标题绑定到我的视图模型中的一个属性,这样我就知道何时选择了一个选项卡。

我的思考过程使我尝试了以下方法:

<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

而不是<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;
    }
} 

Headeris no attached property, so you cant bind to it through SelectedValue.Header="{}".

于 2012-12-12T11:57:11.903 回答