0
我分配一个DataContext使用这种XAML一个CustomControl:将参数传递给视图模型构造CustomControl
<Setter Property="DataContext" Value="{Binding TimeUnitGridViewModel, Mode=OneWay, Source={StaticResource Locator}}" />
可正常工作。 'Locator'是在文件的资源中声明的MVVMlight ViewModelLocator。
我该如何重写这个XAML以允许将参数传递给ViewModel的构造函数?我应该可以使用属性注入,但我不知道语法。
编辑:
这是我在ViewModelLocator使用代码:
public TimeUnitGridViewModel TimeUnitGridViewModel
{
get
{
return ServiceLocator.Current.GetInstance<TimeUnitGridViewModel>(Guid.NewGuid().ToString());
}
}
我不确定这种方法。我的(肯定很快就会被纠正)的理解是,你的约束必须针对一个预先存在的对象来完成。您不能将事物(即ViewModel)调用为绑定。在View上的Loaded事件上使用事件触发器可能更好一些吗?触发器触发一个ViewModel方法,用您的参数实例化TimeUnitGridViewModel。 – goobering 2015-04-02 10:18:53
嗯。你让我想知道为什么它现在工作。我用这个在视图模型定位:“公共TimeUnitGridViewModel TimeUnitGridViewModel { 得到 { 回报ServiceLocator.Current.GetInstance(Guid.NewGuid()的ToString()); } }' –
jidl
2015-04-02 13:34:06
第一个绑定将工作得很好,因为ViewModelLocator已经创建了TimeUnitGridViewModel的一个实例。随后绑定到该ViewModel将引用*相同的实例*。有可能创建该ViewModel的多个实例,但它稍微复杂一些(请参阅LBugnion的答案:http://stackoverflow.com/questions/2830517/how-to-have-multiple-pairs-view-viewmodel/2848084# 2848084)。你试图传入的参数是什么,它有什么作用? – goobering 2015-04-02 14:06:49