2015-06-16 2 views
3

Используя шаблон MVVM и WPF, я хотел бы привязать свои элементы управления к двум свойствам. Предположим, что у меня есть метка, привязанная к свойству на VM1, и я хотел бы связать ее также с свойством на VM2, чтобы отправить полученное значение с VM1 на VM2.Управление привязкой к двум свойствам

Я мог бы использовать мессенджер и для нескольких элементов Tuple Class, но мне было интересно, есть ли для этого другое решение. MultiBinding? но тогда мне нужен ValueConverter.

Благодарим за любые предложения.

ответ

1

С View-Model - это абстракция вида, которая раскрывает общедоступные свойства и команды. Для представления не имеет большого смысла представление двух моделей вида так, как вы объяснили. Это будет более рационально, если есть класс VM как модель представления вашего вида, которая имеет два свойства типа VM1 и VM2. Тогда связывание будет на VM.VM1.YourText и вы можете уведомить VM2 через события, как это:

в VM1:

public event EventHandler<EventArgs> ValueChanged; 

    string _yourText; 
    public string YourText 
    { 
     get 
     { 
      return _yourText; 
     } 
     set 
     { 
      _yourText= value; 
      if (ValueChanged != null) 
       ValueChanged(_yourText, new EventArgs()); 
     } 
    } 

В VM:

public VM1 Vm1 {get; set;} 
    public VM2 Vm2 {get; set;} 

    public VM() 
    { 
     InitializeComponent(); 
     Vm1 = new VM1(); 
     Vm2 = new VM2(); 
     Vm1.ValueChanged += Item_ValueChanged; 
     DataContext = this; 
    } 

    void Item_ValueChanged(object sender, EventArgs e) 
    { 
     VM2.YourAnotherText = sender.ToString(); 
    } 
1

Если подключено 2 свойства, обычно можно использовать INotifyPropertyChanged для уведомления об изменении 2 или более свойств, если на одной и той же ViewModel.

Я понимаю, что вы также хотите уведомить View, связанный с ViewModel, о смене свойства на другой ViewModel. Обычно это делается, позволяя ViewModels обмениваться информацией.

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

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

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