Ошибка режима разработки "Объект не соответствует типу цели" для ресурса загруженной страницы

В настоящее время я пытаюсь смоделировать данные для своего представления, используя данные проектирования для моей модели представления. В частности, у меня есть внешний вид View и серверная часть ViewModel для моего приложения Silverlight.

Когда я смоделировал другие взгляды, все работало отлично. Даже в этом конкретном случае, похоже, единственная проблема связана с коллекциями.

Любая идея, почему мой "CategoryItem" продолжает выдавать мне ошибку, когда я пытаюсь присвоить значение "CategoryName"? Я понятия не имею, что вызывает проблему...

Код ниже:

Мои данные дизайна:

<vm:MainPageViewModel
    xmlns:vm="clr-namespace:WebCatalog.ViewModels"    
    xmlns:m="clr-namespace:WebCatalog.Models"   
    SelectedTab="Category 1"
    ProjectName="New Project Name"
    ShowPopup="False"
    IsBusy="False"
    CurrentUser="Alex"
    >
    <vm:MainPageViewModel.Categories>
        <m:CategoryItem CategoryName="test"/>
    </vm:MainPageViewModel.Categories>


</vm:MainPageViewModel>

Моя упрощенная ViewModel:

public class MainPageViewModel {
    public string SelectedTab {get;set;}
    public string ProjectName {get;set;}
    public bool ShowPopup {get;set;}
    public bool IsBusy {get;set;}
    public string CurrentUser {get;set;}

    public ObservableCollection<CategoryItem> Categories {get;private set;}

    public MainPageViewModel()
    {
         Categories = new ObservableCollection<CategoryItem>();
    }
}

Наконец, мое (упрощенное) представление:

<UserControl 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      d:DataContext="{d:DesignData Source=../SampleData/MainWindowSampleData.xaml}">
<!-- Decision Categories -->
                <StackPanel Width="200" toolkit:DockPanel.Dock="Left" Height="100">
                    <TextBlock Text="{Binding CurrentUser}">meep</TextBlock>
                    <ItemsControl Height="100" ItemsSource="{Binding Categories}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock>Itemalkdjfa;ldfj;lakdsjfladfjal;dfjaldfja</TextBlock>
                                    <TextBlock Text="{Binding CategoryName}"></TextBlock>
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

                </StackPanel>

1 ответ

На вашей виртуальной машине меняются

public ObservableCollection<CategoryItem> Categories {get;private set;}

в

public ObservableCollection<CategoryItem> Categories {get;set;}

В противном случае мой пример привязки xaml выглядел и работал в режиме конструктора следующим образом:

<local:MainVM x:Key="myMainVM">
    <local:MainVM.Categories>
        <local:CategoryItem Name="Test" />
    </local:MainVM.Categories>
</local:MainVM>

...

<ListBox DataContext="{StaticResource myMainVM}" 
         ItemsSource="{Binding Categories}">
    <ItemsControl.ItemTemplate>
        <DataTemplate><TextBlock Text="{Binding Name}"/></DataTemplate>
    </ItemsControl.ItemTemplate>
</ListBox>

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

public class MainVM
{

    public ObservableCollection<CategoryItem> Categories { get; set; }

    public MainVM()
    {
        Categories = new ObservableCollection<CategoryItem>();
    }

}

public class CategoryItem
{
    public string Name { get; set; }
}
Другие вопросы по тегам