我有一个tabcontrol并在一组tabitems中。我想将selectedvalue的标题绑定到我的viewmodel中的属性,以便我知道何时选择了一个标签。
我的思考过程让我尝试以下方法:
<TabControl x:Name="TabControl" SelectedValue.Header="{Binding SelectedTab}">
这不起作用 - 可能是因为SelectedValue不是HeaderedContentControl类型(尽管它总是在这个实例中)。
是否可以在XAML内联中进行转换,以便我可以执行上述操作?
或者,任何人都可以建议另一种方式来有效地实现同样的事情吗?我不想改变XAML的代码隐藏。
答案 0 :(得分: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>
答案 1 :(得分:1)
而不是<TabControl x:Name="TabControl" SelectedValue.Header="{Binding SelectedTab}">
绑定到SelectedValue并使用转换器获取Header,如下所示:
<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="{}"
绑定它。