我有ObjectDataProvider
绑定到我的viewmodel的GetProducts()
方法:
<ObjectDataProvider x:Key="GetProducts"
ObjectType="vm:MainViewModel"
MethodName="GetProducts">
<ObjectDataProvider.MethodParameters>
<m:Subcategory Id="-1"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
据我了解,这会创建一个MainViewModel
的实例来调用该方法。最近我开始使用MVVM Light,它的ViewModelLocator
类注册了自己的同一个viewmodel的实例,所以现在我有两个viewmodel而不是一个。
感觉不对,所以我想知道:是否可以将ViewModelLocator
创建的视图模型传递给ObjectDataProvider
?
我尝试使用绑定但ObjectInstance
属性显然不是依赖属性,所以不能在这里使用它。我怎么能这样做?
答案 0 :(得分:0)
我设法通过完全摆脱ObjectDataProvider
并将一些属性添加到我的viewmodel来实现这一点,例如。
// 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}"
现在我只有一个viewmodel实例!耶!