2013-12-17 6 views
1

Я объявляю пользовательский элемент управления в представлении. У Control есть свой собственный ViewModel, который я объявляю в XAML родительского представления. Я хотел бы передать значение в этот вид ViewModel с помощью привязки, но я не использую свойство зависимостей и скорее не буду. Есть ли способ сделать это? или мне понадобится долгая переделка?Передача параметров в пользовательский контроль ViewModel, MVVM

Декларация ребенка ViewModel, включая связывание, что не работает:

<Window.Resources> 
    <uc:PagerViewModel x:Key="PagerDataContext" PagesContent="{Binding DisplayedRawData}"> 
    </uc:PagerViewModel> 
<Window.Resources> 

декларация таможенного контроля:

<uc:Pager Grid.Row="1" DataContext="{StaticResource PagerDataContext }"/> 

Детский ViewModel relivent Код:

public string PagesContent 
    { 
     get 
     { 
      return _pagesContent; 
     } 
     set 
     { 
      _pagesContent = value; 
      OnPropertyChanged("PagesContent"); 
     } 
    } 
    private string _pagesContent = string.Empty; 
+0

Я знаю, как это сделать, но не с ресурсами. Это когда вы устанавливаете элементы управления DataContext ViewModel, а затем выполняете связывание с родственниками. :) –

+0

Несомненно, это может сработать. Мне действительно нравится идея объявлять мои ViewModels как ресурсы xaml. Если я не смогу придумать другое решение, которое, вероятно, я сделаю. – CThin

+0

Ну, я бы использовал библиотеку Caliburn.Micro, чтобы подключить мои ViewModels к элементам управления вместо использования ресурсов. TBH, я не вижу в этом преимущества, кроме использования его с CollectionViewSource. –

ответ

0

Любое обязывающее Цель должна быть зависимым свойством - вы не можете связать до свойство вида-вида. Один альтернативный подход, основанный на том, что вы представили, чтобы создать свойство зависимости от зрения, а затем передать его на вид-модель таким образом:

<Window.Resources> 
    <uc:PagerViewModel x:Key="PagerDataContext" /> 
<Window.Resources> 

Итак, объявить свойство зависимостей DisplayedRawData в элементе управления uc:Pager; внутри его PropertyChangedEventHandler, передать новое значение вместе с моделью вида:

((PagerViewModel)DataContext).PagesContent = DisplayedRawData 
Смежные вопросы