MVVM Light 通过 ViewModelLocator 将 ViewModel 传递给 ObjectDataProvider

MVVM Light pass ViewModel to ObjectDataProvider via ViewModelLocator

我有一个 ObjectDataProvider 绑定到我的视图模型的 GetProducts() 方法:

<ObjectDataProvider x:Key="GetProducts"
                    ObjectType="vm:MainViewModel"
                    MethodName="GetProducts">
    <ObjectDataProvider.MethodParameters>
        <m:Subcategory Id="-1"/>
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

据我所知,这会创建一个 MainViewModel 的实例来调用该方法。最近我开始使用 MVVM Light,它的 ViewModelLocator class 注册了它自己的相同视图模型的实例,所以现在我有两个视图模型而不是一个。

感觉不对,所以我想知道:是否可以将 ViewModelLocator 创建的视图模型传递给 ObjectDataProvider

我尝试使用绑定,但 ObjectInstance 属性 显然不是依赖项 属性,因此不能在此处使用。我还能怎么做?

我设法通过完全摆脱 ObjectDataProvider 并向我的视图模型添加一些属性来实现这一目标,例如

    // This property took place of MethodParameter[0]
    public Subcategory SelectedSubcategory
    {
        get { return _selectedSubcategory; }
        set
        {
            Set(() => SelectedSubcategory, ref _selectedSubcategory, value);
            RaisePropertyChanged("Products");
        }
    }

    public IEnumerable<Product> Products
    {
        get
        {
            if (SelectedSubcategory != null)
                return SelectedSubcategory.Products;
            return null;
        }
    }

我还需要更改 XAML 中的相应绑定,例如这个:

SelectedItem="{Binding Source={StaticResource GetProducts},
                       Path=MethodParameters[0],
                       BindsDirectlyToSource=True,
                       UpdateSourceTrigger=PropertyChanged}"

变成了:

SelectedItem="{Binding SelectedSubcategory, Mode=OneWayToSource}"

现在我只有一个视图模型实例!耶!