我有一个具有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>
答案 0 :(得分:1)
首先,问题可能只是您需要在IsDesignTimeCreatable=True
声明中添加d:DesignInstance
,如下所示:
d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}"
如果这没有帮助,问题可能是您的视图模型没有无参数构造函数,或者它无法在其构造函数中为InternalViewModelProperty
设置值。
换句话说,您的视图模型需要具有不带参数的构造函数,并且在该构造函数中,您需要将InternalViewModelProperty
设置为非null值。此外,您需要确保Collection
的{{1}}属性也设置为非空值。