0

我有一个具有 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>
4

1 回答 1

1

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

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

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

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

于 2013-10-16T01:31:25.973 回答