2012-03-13 6 views
0

У меня есть текстовое поле и кнопка в UserControl, и он открывает окно в кнопке clickto выбрать что-то и положить в текстовом поле: так:Как связать зависимость свойства usercontrol с собственностью viemodel usercontrol?

string myProperty; 
    public string MyProperty 
    { 
     get 
     { 
      return myProperty; 
     } 
     set 
     { 
      myProperty= value; 
      RaisePropertyChanged("MyProperty"); 
     } 
    } 

public ICommand buttonClickCommand 
{ 
    get { return new RelayCommand(ShowItemView); } 
} 
void ShowItemView() 
    { 
    var ItemViewModel = new ItemViewModel(); 
    var ItemView = new ItemView(); 
    ItemView .DataContext = ItemViewModel ; 
    ItemView .ShowDialog(); 
    if (ItemViewModel .SelectedItem != null) 
     myProperty= ItemViewModel .SelectedItem.Name; 
    } 

и теперь я хочу, чтобы создать два экземпляра UserControl в окне, и связать их текстовое поле для двух свойств ViewModel окна, поэтому я сделать свойство зависимостей для этого, как это:

public static readonly DependencyProperty OperandTextValueProperty = DependencyProperty.Register("OperandTextValue", 
      typeof(string), 
      typeof(DefaultSpecItemControl), 
      new FrameworkPropertyMetadata() 
      { 
       PropertyChangedCallback = OnOperandTextValue, 
       BindsTwoWayByDefault = true 
      }); 

    public string OperandTextValue 
    { 
     get 
     { 
      return (string)GetValue(OperandTextValueProperty); 
     } 
     set 
     { 
      SetValue(OperandTextValueProperty, value); 

     } 
    } 

и привязать его к свойствам в ViewModel окна, но я не знаю, как я могу связать его с viemodel usercontrol, в этом случае связать его к MyProperty в viewmodel элемента управления. Так

1: Есть ли способ привязать зависимость? Свойство usercontrol к его собственной модели просмотра?

2: Я на правильной дороге?

благодарит заранее.

+0

если 'ItemView' это диалоговое окно с возможностью отмены/закрытия, используйте следующие строки: если (ItemView .ShowDialog() == TRUE) если (! ItemViewModel .SelectedItem = нуль) MyProperty = ItemViewModel .SelectedItem .Имя; или аналогично этому. – stukselbax

+0

Почему, по-вашему, вам нужно определить DependenyProperty в вашем окне, если вы следуете шаблону MVVM, тогда вам лучше определить только простые свойства в ViewModel Windows. Затем свойства Tthese должны возвращать значение из соответствующей ViewModel UserControl. Ваш вопрос непонятен мне, пожалуйста, объясните все больше и лучше. – 000

+0

@Sam: я не определяю dependencyProperty в окне, я определяю его в usercontrol.and я хочу привязать его к viewmodel userControl. –

ответ

1

Да, есть способ связать свойство зависимостей пользовательского элемента управления к своей собственной модели представления, хотя, в большинстве случаев вы хотите связать пользовательский интерфейс пользовательского элемента управления к самому себе, т.е.

LayoutRoot.DataContext = this; 

Общие указания по проектированию и привязке пользовательского контроля см. В разделе this tutorial I wrote.

+0

: спасибо, но я не понял, не могли бы вы объяснить больше? Что такое LayoutRoot? !! –

+0

@Raha - ознакомьтесь с учебником, к которому я привязался. LayoutRoot является корневым элементом вашего пользовательского элемента управления. – ColinE

+0

@ColinE, UserControl сам по себе не имеет свойства LayoutRoot, я думаю, что «LayoutRoot» - это имя, которое использует шаблон по умолчанию для UserControl. – 000

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