Vincular un ComboBox a una enumeración anidada en una clase

Me he estado volviendo loco al vincular un combobox a una propiedad tipificada enumeración de una clase, donde el enum se declara en esa misma clase.

Estoy tratando de seguir la respuesta proporcionada aquí(wpf combobox vinculante para enumerar lo que hice mal?) Específicamente, estoy usando el código de MarkupExtension sugerido y el código xaml correspondiente.

Mi código de trabajo es:

Definiendo el Enum en un archivo separado.

namespace EnumTest
{
    public enum TestEnum {one, two, three, four };
}

Clase que utiliza el Enum (tenga en cuenta que el código propertyChanged se ha eliminado para simplificar las cosas):

namespace EnumTest
{
    public class Test : INotifyPropertyChanged
    {
        private TestEnum _MyVar;
        public TestEnum MyVar { 
            get { return _MyVar; } 
            set 
            { 
                _MyVar = value;
                OnPropertyChanged("MyVar");
            } 
        }

        public Test()
        {
            _MyVar = TestEnum.three;
        }
    }
}

Archivo de programa que utiliza la clase:

namespace EnumTest
{
    public partial class Window1 : Window
    {
        Test _oTest = new Test();

        public Window1()
        {
            InitializeComponent();
            cmbBox.DataContext = _oTest;
        }
    }
 }

Método de extensión para mostrar el Enum

namespace EnumTest
{
    [MarkupExtensionReturnType(typeof(object[]))]
    public class EnumValuesExtension : MarkupExtension
    {
        public EnumValuesExtension()
        {
        }

        public EnumValuesExtension(Type enumType)
        {
            this.EnumType = enumType;
        }

        [ConstructorArgument("enumType")]
        public Type EnumType { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (this.EnumType == null)
                throw new ArgumentException("The enum type is not set");
            return Enum.GetValues(this.EnumType);
        }
    }
}

Y el código xaml que se utiliza para mostrar los datos:

<Window x:Class="EnumTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:w="clr-namespace:EnumTest"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ComboBox Name="cmbBox" 
                  Height="20" 
                  Width="80" 
                  ItemsSource="{Binding Source={w:EnumValues EnumType=w:TestEnum}}" 
                  SelectedItem="{Binding Path=MyVar}"
                  />
    </Grid>
</Window>

Lo anterior es bueno y excelente, pero quiero definir el Enumdentro la clase de prueba y evita que el Enum se defina en el ámbito global. Al igual que:

namespace EnumTest
{
    public class Test : INotifyPropertyChanged
    {
        // Declare Enum **INSIDE** the class
        public enum TestEnum {one, two, three, four };
        private TestEnum _MyVar;
        public TestEnum MyVar { 
            get { return _MyVar; } 
            set 
            { 
                _MyVar = value;
                OnPropertyChanged("MyVar");
            } 
        }

        public Test()
        {
            _MyVar = TestEnum.three;
        }
    }
}

La pregunta de SO a la que me referí alude a la sintaxis xaml correspondiente como:

        <ComboBox Name="cmbBox" 
                  ...
                  ItemsSource="{Binding Source={w:EnumValues EnumType=w:Test+TestEnum}}" 
                  ...
                  />

Pero este (tipo de) no funciona para mí. Cuando hago una compilación limpia, aparece un mensaje "La compilación se realizó con éxito" en la barra de estado de VS 2008, pero también aparece un error en el xaml.

Type 'Test+TestEnum' was not found.  

Pero el código se ejecuta como se esperaba!

Sin embargo, esto significa que el diseñador xaml no se cargará. Así que estoy un poco atornillado al hacer más trabajo wpf hasta que pueda borrar el error xaml.

Ahora me pregunto si esto es un problema de VS 2008 SP1 y no es un problema de mi parte.

Editar

Hizo mi declaración de problema más explícita.Probé la primera solución de Joel, pero terminé con el código ejecutándosey 2 errores de xamlProbé la segunda solución de Joel y funcionó de inmediato, ¡así que voy con esa!

Notas La pregunta SO de la que obtuve el código MarkupExtension de este estilo de sintaxis para xaml:

<ComboBox ItemsSource="{w:EnumValues w:TestEnum}"/>

Cuando lo uso recibo un error de compilación que dice que ningún constructor EnumValues ​​toma 1 parámetro. Hice algo de google y esto parece ser un error en VS. Estoy usando VS 2008 SP1. Vi algunos comentarios que aludían a estar en la versión beta de VS 2010. De todos modos, es por eso que uso la sintaxis xaml de

<ComboBox ItemsSource="{w:EnumValues EnumType=w:TestEnum}"/>

Como esta sintaxis funciona!

Respuestas a la pregunta(2)

Su respuesta a la pregunta