将参数传递给CustomControl的ViewModel构造函数

时间:2015-04-02 10:06:22

标签: wpf xaml mvvm-light

我使用此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());
        }
    }

1 个答案:

答案 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模式。