首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF:将TabControl SelectedIndex绑定到视图模型的枚举属性

WPF:将TabControl SelectedIndex绑定到视图模型的枚举属性
EN

Stack Overflow用户
提问于 2018-06-08 02:44:13
回答 2查看 813关注 0票数 1

我的ViewModel上有一个枚举属性:

ViewModel:

public MyViewModel {

    // Assume this is a DependancyProperty
    public AvailableTabs SelectedTab { get; set; } 

    // Other bound properties
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }
}

public enum AvailableTabs {
    Tab1,
    Tab2,
    Tab3
}

我希望能够将我的TabControl的SelectedIndex (或SelectedItem)绑定到此属性,并使用转换器正确设置适当的选项卡。不幸的是,我有点卡住了。我知道我可以很容易地在我的模型中使用SelectedIndex,但我想要在不破坏任何东西的情况下重新排序选项卡的灵活性。我已经为每个TabItem提供了适用枚举值的Tag属性。

我的XAML:

<TabControl Name="MyTabControl" SelectedIndex="{Binding SelectedTab, Converter={StaticResource SomeConverter}}">
    <TabItem Header="Tab 1" Tag="{x:Static local:AvailableTabs.Tab1}">
        <TextBlock Text="{Binding Property1}" />
    </TabItem>
    <TabItem Header="Tab 2" Tag="{x:Static local:AvailableTabs.Tab2}">
        <TextBlock Text="{Binding Property2}" />
    </TabItem>
    <TabItem Header="Tab 3" Tag="{x:Static local:AvailableTabs.Tab3}">
        <TextBlock Text="{Binding Property3}" />
    </TabItem>
</TabControl>

我的问题是,我不知道如何将TabControl放入我的转换器中,所以我可以这样做:

// Set the SelectedIndex via the enum (Convert)
var selectedIndex = MyTabControl.Items.IndexOf(MyTabControl.Items.OfType<TabItem>().Single(t => (AvailableTabs) t.Tag == enumValue));

// Get the enum from the SelectedIndex (ConvertBack)
var enumValue = (AvailableTabs)((TabItem)MyTabControl.Items[selectedIndex]).Tag;

恐怕我想得太多了。我试着使用MultiValue转换器,但没有太多运气。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-08 05:53:31

您只需要一个将值转换为索引的转换器。

public class TabConverter : IValueConverter
{
    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return (int)value;
    }

    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return (AvailableTabs)value;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-08 02:57:35

我没有在XAML中指定值,而是将ItemsSource绑定到枚举中的值数组:

代码:

public AvailableTabs[] AvailableTabs => Enum.GetValues(typeof(AvailableTabs Enum)).Cast<AvailableTabs>().ToArray();

XAML:

<TabControl Name="MyTabControl" SelectedIndex="{Binding SelectedTab}" ItemsSource="{Binding AvailableTabs}" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档