#wpf
Вопрос:
При создании пользовательского элемента управления WPF можно ли сделать свойство обязательным с помощью атрибута или другого механизма?
Комментарии:
1. Знаете ли вы какие-либо классы, которые уже делают то, что вы ищете?
2. Есть ли какая-то реальная причина для этого? Можете ли вы просто выбрать хороший дефолт? Это противоречит тому, как настроен весь WPF.
Ответ №1:
Присвойте свойству начальное значение, которое можно отличить от любого другого значения, для которого оно может быть установлено (т. Е. Значение null для ссылочных типов).
В тот момент, когда вам понадобится свойство, если оно не было установлено (это.Свойство == Не имеет значения), вызовите исключение InvalidOperationException с описанием проблемы.
Кроме того, убедитесь, что это четко описано в документации по классу, свойству и любым методам, которые вызовут исключение, если свойство не задано.
**
редактировать В качестве альтернативы вы можете создать схему XSD для своего элемента управления, которая идентифицирует свойство как необходимое, однако я не знаю, как это сделать.
Более быстрым решением может быть реализация ISupportInitialize, которая позволит вам проверить свойство во время десериализации, после чего вы сможете создать исключение. Вот сообщение об этом в блоге Relyea об этом.
Комментарии:
1. Хорошее предложение, но я ищу что-то, что выдаст ошибку XAML, когда они попытаются скомпилировать страницу/окно, в котором используется элемент управления.
2. Привет, как дела с этим? Я действительно ищу тот же код, который не будет компилироваться, если свойство certian не было настроено из XAML.