DesignInstance:无法识别嵌套集合属性

时间:2013-10-15 15:17:44

标签: wpf design-time

我有一个具有InternalViewModel类型属性的ViewModel,而该属性又具有Collection属性。

鉴于视图的DataContext是ViewModel的一个实例,绑定内部集合需要以下语法:

{Binding InternalViewModelProperty.Collection}

在运行时它可以正常工作。但是,如果我使用DesignInstance作为代理来表示我的ViewModel对象,那么在设计时它根本不会看到集合(例如,没有列自动生成)。

如果我欺骗并将Collection属性公开为ViewModel属性,并将绑定更改为:

{Binding Collection}

然后它在设计时再次运作。

是否有理由将嵌套为属于ViewModel的另一个属性中的属性的集合在设计时表现不同?这是DesignInstance的限制吗?

这是XAML代码:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:LocalNS"
    xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
    mc:Ignorable="d"
    x:Class="MyUserControl"
    d:DataContext="{d:DesignInstance Type=local:MyViewModel}"
    >
<Grid>
    <DataGrid ItemsSource="{Binding InternalViewModelProperty.Collection}"/>
</Grid>
</UserControl>

1 个答案:

答案 0 :(得分:1)

首先,问题可能只是您需要在IsDesignTimeCreatable=True声明中添加d:DesignInstance,如下所示:

d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}"

如果这没有帮助,问题可能是您的视图模型没有无参数构造函数,或者它无法在其构造函数中为InternalViewModelProperty设置值。

换句话说,您的视图模型需要具有不带参数的构造函数,并且在该构造函数中,您需要将InternalViewModelProperty设置为非null值。此外,您需要确保Collection的{​​{1}}属性也设置为非空值。