Тестовые данные XAML - дизайнер может преобразовывать типы, но среда выполнения не может - PullRequest
3 голосов
/ 11 августа 2010

Я создаю пользовательский элемент управления для отображения заметки. Так что у меня есть NoteViewModel. В моем дизайнере я хочу иметь тестовую заметку. Поэтому в моем XAML есть следующее:

<UserControl.Resources>
    <local:NoteViewModel x:Key="ViewModel" d:IsDataSource="True">
        <local:NoteViewModel.Note>
            <localweb:Note
                NoteID="1"
                CreatedBy="Some Guy"
                CreatedDate="2010-01-01 8:00 AM"
                Category="Some Category"
                NoteText="Some Text"
                />
        </local:NoteViewModel.Note>
    </local:NoteViewModel>
</UserControl.Resources>

Это прекрасно работает во время разработки. Но во время выполнения я получаю ошибки о невозможности преобразования «1» в Int32 и невозможности преобразования «2010-01-01 8:00 AM» в DateTime. Почему проектировщик может иметь дело с этим, но не со временем выполнения? Как мне изменить свой XAML, чтобы дизайнер мог показывать тестовую заметку, но среда выполнения не вылетала?

Ответы [ 2 ]

1 голос
/ 22 августа 2010

Не знаю, почему это происходит, но чтобы устранить проблему с Int, вы можете попытаться указать тип значения для NoteID:

    <localweb:Note xmlns:sys="clr-namespace:System;assembly=mscorelib" ...>
        <localweb:Note.NoteID><sys:Int32>1</sys:Int32></localweb:Note.NoteID>
    </localweb:Note>

Немного долго, но, вероятно, должно работать.

0 голосов
/ 11 августа 2010

Конструктор часто более щадящий, чем стандартный синтаксический анализатор Xaml времени выполнения.

Я не могу понять, почему он не может преобразовать «1» в Int32, поскольку int является одним из немногих примитивных типов, которые изначально анализируют в Xaml. Вам нужно будет украсить вашу CreatedDate недвижимость с помощью TypeConverterAttribute: -

 [TypeConverterAttribute(typeof(DateTimeTypeConverter))]
 public CreatedDate { get; set; }

без этого парсер xaml не знает, что делать с датой. Хуже всего то, что дизайнер будет использовать стандартную культуру пользовательского интерфейса, чтобы определить, как анализировать дату, тогда как Xaml будет часто использовать что-то другое. Я нашел эту конкретную проблему довольно неразрешимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...