我使用此XAML将datacontext分配给CustomControl:
<Setter Property="DataContext" Value="{Binding TimeUnitGridViewModel, Mode=OneWay, Source={StaticResource Locator}}" />
这可以按预期工作。 &#39;定位器&#39;是在文件资源中声明的MVVMlight ViewModelLocator。
如何重写此XAML以允许将参数传递给ViewModel的构造函数?我应该可以使用属性注入,但我不知道语法。
修改
这是我在ViewModelLocator中使用的代码:
public TimeUnitGridViewModel TimeUnitGridViewModel
{
get
{
return ServiceLocator.Current.GetInstance<TimeUnitGridViewModel>(Guid.NewGuid().ToString());
}
}
答案 0 :(得分:-1)
可以将ObjectDataProvider定义为Windows资源,可能是这样的:
<Window.Resources>
<ObjectDataProvider x:Key="myProvider" ObjectType="{x: Type TimeUnitGridViewModel}" MethodName="GetMyself">
<ObjectDataProvider.ConstructorParameters>
<system:String>some parameter, or your enum instead...</system:String>
</ObjectDataProvider.ConstructorParameters>
</Window.Resources>
方法GetMyself
只包含return this;
然后,您的绑定将是:
<Setter Property="DataContext" Value="{Binding Source={StaticResource myProvider}}" />
但是再一次,你的这个“视图模型”实际上并不像MVVM那样是一个视图模型。此外,您只能像这样进行单向绑定,您无法通过ObjectDataProvider从视图更新视图模型!
因此,我再次建议使用基本视图模型类,并从中派生PlanTimeUnitGridViewModel和ActualTimeUnitGridViewModel。像这样,代码中没有冗余,你可以使用两个视图模型,因为它们应该是MVVM模式。