Я использую XamlServices.Transform, чтобы взять объектную модель и сериализовать ее в Xaml.
Я реализовал класс, который наследуется от XamlXmlWriter, который переопределяет WriteValue. Я использую это, чтобы восстановить пользовательский MarkupExtension обратно в визуализированный Xaml. Мой код работает нормально, за исключением случаев, когда значение свойства равно нулю, и в этом случае WriteValue не срабатывает, и у меня нет шанса «поменять» значение в переопределенном классе.
Связанная проблема заключается в том, что свойство имеет то же значение, которое указано в атрибуте System.ComponentModel.DefaultValue (). Например, скажем, у меня есть свойство в моей объектной модели, оформленное так:
[DefaultValue(true)]
public Boolean IsVisible {get; set;}
Тогда метод WriteValue срабатывает только в том случае, если свойство IsVisible имеет значение false (что имеет смысл).
Раздел примечаний в документации (http://msdn.microsoft.com/en-us/library/system.xaml.xamlxmlwriter.writevalue.aspx) упоминает что-то о нулевых значениях, но я этого не понимаю:
Входное значение может быть нулевым, что
поддерживает явное выписывание нуля
как сериализованное значение. Это поведение
использует определение XamlLanguage.Null
как ввод WriteStartObject, а затем
немедленно вызывает WriteEndObject.
Как мне а) вызвать «WriteValue», если свойство имеет значение null, и б) вызвать «WriteValue», если свойство совпадает с атрибутом DefaultValue?
Я не уверен, связаны ли они, решение для любого из них было бы очень кстати.
Спасибо
Daniel