I have an Enum that I want to bind to a Tab Control. Basically I want the Enum member names (Descriptions) to populate the tab headers and the selected Tab to set the Enum Value.
What I want to do is have the Selected tab, control the value of the Enum. So when I select Tab "DC Hipot" it sets the value of the enum to DCW, When I select the "Resistance" Tab it sets the value of the enum to LOWOHM. Then I want the reverse to be true, if the enum value changes then the corresponding tab is selected. So for example if the enum value changes to LOWOHM then the selected tab is changed to "Resistance".
I have read this thread Binding TabControl to an enum but it does not provide a complete solution. I do not see where any of this actually ties in to the Tab Control.
This is an example with radio buttons and an int of what I want to do with Tabs and an Enum. Simple WPF RadioButton Binding?
The Specific enum is MV_Main.SelectedTestStepForUI.vTestType.
Here is my MainWindows.xaml
<Window x:Class="Hipot_Sequence_Editor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Hipot_Sequence_Editor"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:local1="clr-namespace:Hipot_Sequence_Editor.UI_Converters"
mc:Ignorable="d"
Title="MainWindow" Height="677.538" Width="896.456">
<Window.DataContext>
<local:MV_Main></local:MV_Main>
</Window.DataContext>
<Window.Resources>
<local1:DoubleStringConverter x:Key="DoubleStringConverter" />
</Window.Resources>
<WrapPanel>
<TabControl>
<TabItem Header="Resistance">
<WrapPanel>
<WrapPanel>
<Label Content="Resistance"></Label>
<xctk:MaskedTextBox Width="50" Mask="0.000mO" Text="{Binding SelectedTestStepForUI.MaxResistance, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
<WrapPanel>
<Label Content="Dwell Time"></Label>
<xctk:MaskedTextBox Width="50" Mask="0000mS" Text="{Binding SelectedTestStepForUI.TestTimeResistance, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
</WrapPanel>
</TabItem>
<TabItem Header="DC Hipot">
<WrapPanel>
<WrapPanel>
<Label Content="Voltage"></Label>
<xctk:MaskedTextBox Width="50" Mask="0.000kV" Text="{Binding SelectedTestStepForUI.Voltage, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
<WrapPanel>
<Label Content="Ramp Time"></Label>
<xctk:MaskedTextBox Width="50" Mask="0000mS" Text="{Binding SelectedTestStepForUI.RampTime, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
<WrapPanel>
<Label Content="Dwell Time"></Label>
<xctk:MaskedTextBox Width="50" Mask="0000mS" Text="{Binding SelectedTestStepForUI.DwellTime, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
<WrapPanel>
<Label Content="Max Leakage Current"></Label>
<xctk:MaskedTextBox Width="50" Mask="00.000m\A" Text="{Binding SelectedTestStepForUI.MaxLeakageLimit, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
<WrapPanel>
<Label Content="Max Breakdown Current"></Label>
<xctk:MaskedTextBox Width="50" Mask="00.000m\A" Text="{Binding SelectedTestStepForUI.BreakDownLimit, Converter={StaticResource DoubleStringConverter}}"></xctk:MaskedTextBox>
</WrapPanel>
</WrapPanel>
</TabItem>
</TabControl>
</WrapPanel>
</Window>
Here is the Main View Model, MV_Main and it's dependencies
[AddINotifyPropertyChangedInterface] //** Fodo
class MV_Main
{
public MV_Test SelectedTestStepForUI { get; set; }
public IEnumerable<TestType> TestTypes
{
get
{
return Enum.GetValues(typeof(TestType))
.Cast<TestType>();
}
}
public MV_Main()
{
SelectedTestStepForUI = new MV_Test();
}
}
public enum TestType
{
[Description("AC Hipot")]
ACW,
[Description("DC Hipot")]
DCW,
[Description("Resistance")]
LOWOHM
}
[AddINotifyPropertyChangedInterface] //** Fodo
public class MV_Test
{
public TestType vTestType { get; set; }
//** DCW Items
public double RampTime { get; set; }
public double DwellTime { get; set; }
public double Voltage { get; set; }
public double MaxLeakageLimit { get; set; }
public double MinLeakageLimit { get; set; }
public double BreakDownLimit { get; set; }
public double ArcDetectionTimeLimit { get; set; }
public double ArcDetectionCurrentLimit { get; set; }
//** LOWOHM Items
public double TestTimeResistance { get; set; }
public double MinResistance { get; set; }
public double MaxResistance { get; set; }
}