WPF Design Time путаница данных

Почему при создании некоторых данных времени разработки для моего MVVM View мне приходится дважды вкладывать xmlns для доступа к свойствам свойства?

Пример:

       <d:DesignProperties.DataContext>
            <local:UserListViewModel>
                <local:UserListViewModel.Users xmlns:local="clr-namespace:ChatModule.ViewModels">
                    <local:User Name="Person 1" />
                    <local:User Name="Person 2" />
                    <local:User Name="Person 3" />
                    <local:User Name="Person 4" />
                    <local:User Name="Person 5" />
                    <local:User Name="Person 6" />
                </local:UserListViewModel.Users>
            </local:UserListViewModel>
       </d:DesignProperties.DataContext>

У меня уже есть локальное свойство, определенное в xmlns UserControl. Но чтобы получить доступ к структуре User в моем базовом классе, я должен снова определить ее в свойстве Users.

Это почему?

Все это прекрасно работает... Я вижу свои данные во время выполнения, которые потрясающие. Я никогда не делал этого раньше, так что приятно видеть это. Я замечаю, что часто получаю ошибки, которые исчезают при компиляции... но возвращаюсь снова всякий раз, когда я меняю xaml.

The property 'Name' was not found in type 'User'.
The property 'Name' was not found in type 'User'.
The property 'Name' was not found in type 'User'.
The property 'Name' was not found in type 'User'.
The property 'Name' was not found in type 'User'.
The property 'Name' was not found in type 'User'.

Очевидно, это работает, иначе я бы не смог увидеть данные времени выполнения.

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

И так я сделал так... вот так...

<UserListViewModel xmlns="clr-namespace:ChatModule.ViewModels">
    <UserListViewModel.Users xmlns:local="clr-namespace:ChatModule.ViewModels">
        <local:User Name="Person 1" />
        <local:User Name="Person 2" />
        <local:User Name="Person 3" />
        <local:User Name="Person 4" />
        <local:User Name="Person 5" />
        <local:User Name="Person 6" />
    </UserListViewModel.Users>
</UserListViewModel>

Однако, когда я избавляюсь от кода позади, я получаю те же ошибки, упомянутые выше (которые исчезают при сборке), но также и ошибку, которая говорит

Cannot set properties on propety elements. Line 2 Position 6.

Это не позволяет мне строить в отличие от других ошибок. Почему это? Как мне это исправить? Я все еще привыкаю к ​​этим данным о времени проектирования.

1 ответ

Решение

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

Вот как выглядит мой код сейчас.

В моем основном xaml у меня есть это:

<Grid Name="LayoutRoot" d:DataContext="{d:DesignData Source=DesignTimeData/UserListViewData.xaml}">
    <ListView ItemsSource="{Binding Users}" ItemTemplate="{StaticResource UserTemplate}"  VerticalContentAlignment="Center" HorizontalContentAlignment="Stretch" Background="#505050" >
    </ListView>
</Grid>

И в отдельном файле xaml у меня есть это:

<local:UserListViewModel xmlns:local="clr-namespace:ChatModule.ViewModels">
    <local:UserListViewModel.Users >
        <local:User Name="Person 1" />
        <local:User Name="Person 2" />
        <local:User Name="Person 3" />
        <local:User Name="Person 4" />
        <local:User Name="Person 5" />
        <local:User Name="Person 6" />
    </local:UserListViewModel.Users>
</local:UserListViewModel>

Я все еще получаю "Свойство" Имя "не найдено..." в резервном файле xaml, но больше не в основном файле xaml представления. Я нахожу это довольно элегантным. И таким образом... представление все еще остается ПОЛНОСТЬЮ, не обращая внимания на фактический тип ViewModel... тогда как, когда я имел его в файле представления xaml, как и раньше, он должен был знать эту информацию, даже если это только во время разработки.

Вот, кстати, работает... это в редакторе xaml Visual Studio.

Вот пример проблемы с ошибками, из-за которой игра с угадайкой делает все правильно. Нет смысла и прочее, если я не перекомпилирую, чтобы очистить ошибки, пока я снова не испорчу какой-нибудь синтаксис. Он по-прежнему работает так же хорошо, как Design Time Data, поэтому я не знаю, что случилось.

http://i.imgur.com/jiVKm.jpg

Другие вопросы по тегам