2015-02-20 3 views
0

У меня есть ObjectDataProvider, который связывается с GetProducts() методом моего ViewModel:MVVM Light проходят ViewModel к ObjectDataProvider через ViewModelLocator

<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, по-видимому, не является свойством зависимостей, поэтому его здесь нельзя использовать. Как еще я могу это сделать?

ответ

0

Мне удалось достичь этого, полностью избавившись от 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}" 

Теперь у меня есть только один ViewModel экземпляр! Ура!

Смежные вопросы