【问题标题】:MVVM Light pass ViewModel to ObjectDataProvider via ViewModelLocatorMVVM Light 通过 ViewModelLocator 将 ViewModel 传递给 ObjectDataProvider
【发布时间】:2015-02-20 06:52:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# wpf mvvm mvvm-light


    【解决方案1】:

    我设法通过完全摆脱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}"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2016-06-21
      • 2014-08-29
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多