设计模式错误"对象与目标类型不匹配"用于加载页面资源

时间:2015-08-04 17:01:08

标签: c# wpf visual-studio-2010 silverlight design-data

我目前正在尝试使用ViewModel的Design Data来模拟我的视图数据。具体来说,我有一个View前端,以及一个用于我的silverlight应用程序的ViewModel后端。

当我嘲笑其他观点时,情况完美无缺。即使在这种特殊观点中,唯一的问题似乎也必须与馆藏有关。

知道为什么我的" 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 个答案:

答案 0 :(得分:0)

在您的VM更改

vm.SeeDetails = function SeeDetails(LogID) {
    if (vm.ShowDetails == 'false') {
        vm.ShowDetails = 'true';
    } else {
        vm.ShowDetails = 'false';
    }
    setTimeout( function() { $scope.$apply(); }, 0 );
}

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

否则我的样本xaml绑定在设计模式下看起来像这样:

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

...

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

虚拟机镜像你的(没有私有集),虚拟机在Silverlight上的Xaml中加载,并以设计模式显示数据。

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