我的 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 转换器,但运气不佳。有任何想法吗?
2 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
我不会在 XAML 中指定值,而是将 ItemsSource 绑定到枚举中的值数组:
代码:
public AvailableTabs[] AvailableTabs => Enum.GetValues(typeof(AvailableTabs Enum)).Cast<AvailableTabs>().ToArray();
XAML:
<TabControl Name="MyTabControl" SelectedIndex="{Binding SelectedTab}" ItemsSource="{Binding AvailableTabs}" />
子衿沉夜
TA贡献1828条经验 获得超3个赞
您只需要一个将值转换为索引的转换器。
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;
}
}
- 2 回答
- 0 关注
- 532 浏览
添加回答
举报
0/150
提交
取消