Возможные проблемы с использованием DesignerProperties.GetIsInDesignMode (...)? - PullRequest
1 голос
/ 22 декабря 2011

Я создаю пользовательский элемент управления WPF и столкнулся с ситуацией.Большая часть кода не выполняется до тех пор, пока не инициализируется элемент управления: if (this.IsInitialized) { ... } Однако, это вызывает проблему у моего дизайнера, потому что он никогда не инициализируется.

Мне просто интересно, если использовать DesignerProperties.GetIsInDesignMode()в пользовательском элементе управления это нормально для использования, и если да, должен ли я опасаться каких-либо ловушек?Я спрашиваю об этом, потому что просто кажется «грязным» иметь специфичную для дизайнера проверку / код в пользовательском элементе управления.

Я полагаю, хорошей меркой было бы узнать, использует ли Microsoft специфичный для дизайнера код (не атрибуты)в каком-то из их управляющих кодов?

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Это одна из главных причин, по которой этот метод существует в первую очередь.

Хотя я согласен с тем, что кажется «грязным» включать проверку логики конкретного кода в логику кода, иногда это самый прагматичный подход. Лично я считаю, что заставить работать элемент управления в режиме разработки - это часть необходимой реализации и функции пользовательского элемента управления, и в этом случае наличие кода, специально предназначенного для этого случая, не обязательно является плохим.

Большая часть кода не выполняется до инициализации элемента управления:

Однако я бы посоветовал присмотреться к этому коду. При создании пользовательского элемента управления в WPF часто лучше иметь код, который выполняется на основе данных, с которыми он связан, а не от того, был ли код инициализирован. Если вы выполняете свой код на основе связанных данных или свойств, не должно иметь значения, работаете ли вы в конструкторе или выполняете приложение.

0 голосов
/ 24 января 2014
public MyView()
        {
            if (DesignerProperties.GetIsInDesignMode(this))                                          
                return;

            InitializeComponent();            
        }
...