Как реализовать собственное свойство DataType для UserControl - PullRequest
0 голосов
/ 29 февраля 2012

Я хотел бы реализовать usercontrol, который получает enumtype через код XAML.Теперь вопрос, как мне реализовать свойство, которое может получить DataType.До сих пор я пробовал следующее:

Код позади:

public partial class Test : UserControl, INotifyPropertyChanged
{
       #region DependencyProperty: EnumType
        public Type EnumType
        {
            get
            {
                return (Type)GetValue(EnumTypeProperty);
            }
            set
            {
                SetValue(EnumTypeProperty, value);                
            }
        }

        public static readonly DependencyProperty EnumTypeProperty =
            DependencyProperty.Register("EnumType", typeof(Type), typeof(Test),
            new FrameworkPropertyMetadata());
        #endregion
}

И в XAML я пробовал это:

...

<Grid>
        <local:Test EnumType="{x:Type local:TestEnum}" />
</Grid>

...

TestEnum:

public enum TestEnum
{
    eins,
    zwei,
    drei
}

Но это не работает.Кажется, что свойство EnumType никогда не устанавливается.

Кто-нибудь знает, как это сделать правильно?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Что заставляет вас думать, что это не работает?Я попробовал ваш код выше, добавив PropertyChangedCallback:

    public static readonly DependencyProperty EnumTypeProperty =
        DependencyProperty.Register("EnumType", typeof(Type), typeof(Test),
        new FrameworkPropertyMetadata(MyCallBack));

    private static void MyCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // See if we reach this point
    }

И он, кажется, вызывается, как и ожидалось, назначая значение Type для TestEnum, как вам требуется.

0 голосов
/ 29 февраля 2012

Попробуйте

public static DependencyProperty EnumValueProperty = DependencyProperty.Register("EnumValue", typeof(TestEnum), typeof(Test), new PropertyMetadata(null));

    public TestEnum EnumValue
    {
        get { return (TestEnum)GetValue(EnumValueProperty); }
        set { SetValue(EnumValueProperty, value); }
    }

<local:Test EnumValue="eins"/>

Я не уверен, почему вы использовали Type в качестве типа свойства, просто используйте TestEnum Type.

Вы получаете какие-либо ошибки сборки?Я часто нахожу, что иногда intellisense не работает в редакторе XAML, пока я снова не собрал элемент управления, это может быть красная сельдь.

EDIT

Извинения, я получилСовершенно неверно, мне удалось заставить ваш код компилироваться и запускаться, однако я не вижу тип enum как допустимый тип в intellisense.

...