Ошибка режима разработки "Объект не соответствует типу цели" для ресурса загруженной страницы
В настоящее время я пытаюсь смоделировать данные для своего представления, используя данные проектирования для моей модели представления. В частности, у меня есть внешний вид 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; }
}