2017-02-10 3 views
3

Я разрабатываю многоразовый элемент управления WPF «R», который имеет свою собственную модель просмотра «VM_R». У меня есть главное окно WPF «Main», которое использует управление R, и оно имеет свою собственную модель просмотра, а также «VM_Main».View Models Two Way Comminication

Мой вопрос: Я хочу VM_Main и VM_R общаться следующим образом:

VM_Main отправить запрос на VM_R оценить что-то и отправить результат обратно в VM_Main.

Я рассмотрел следующие варианты:

  1. Instantiate VM_R в VM_Main. Это создаст проблему связи .
  2. Я могу использовать MVVM Light Messenger. Однако я не хочу иметь два вызова для регистрации и два вызова «Отправить».

Спасибо

+0

Нет, это то, что ** DepenencyProperty ** (ы) для – MickyD

+0

Почему вы хотите, чтобы другой ViewModel оценивал что-то для вашего текущего ViewModel? –

+0

Я хочу читать значения combo-box и checkbox из Control R из VM_MAIN. – John

ответ

-1

Я предлагаю пойти с вариантом 1, но в какой-то лучше. Вы можете использовать DI, чтобы ввести R_VM в R_Main. Вот пример

public interface IR_VM 
{ 
    int MyMethod(int param); 
} 

public class R_VM : IR_VM 
{ 
    public int MyMethod(int param) 
    { 
     // implemention 
     return 0; 
    } 
} 

public class VM_Main 
{ 
    public VM_Main(IR_VM rvm) 
    { 
     RVM = rvm; 
    } 
    public IR_VM RVM { get; set; } 
} 
+1

Я думаю, что создание интерфейсов для ViewModels не улучшает качество кода. Это похоже на обходное решение «не иметь прямой ссылки». Если представление содержит другое представление, ViewModel может иметь прямую ссылку. – jannagy02

+0

Вы не удалили сцепление, вы просто усложнили задачу создания VM_Main. О, и сложнее отладить, добавив слой косвенности. –

+0

Отсутствует сцепление. Здесь я вводил vm, не имея прямой ссылки. Если вы найдете это трудно, я сначала предлагаю прочитать о DI. Вероятно, это поможет понять мой подход. –

0

Я занимаюсь разработкой многоразового управления WPF «R», который имеет свою собственную модель представления «VM_R».

Возможно, это неправильно. Вообще говоря, если вы считаете, что вам нужна модель просмотра для определенного элемента управления, то, что вы действительно делаете, это помещать код в неправильное место.

Вставьте этот код в код для управления и выставите свойства зависимостей, с которыми может привязываться реальная модель или модель представления.

Мгновенное действие VM_R в VM_Main. Это создаст проблемы связи.

Это подтверждает мое подозрение, что вы помещаете код в неправильное место.

Я могу использовать MVVM Light Messenger.

Нет. Никогда не используйте это. MVVM Light Messenger - это просто массивная утечка памяти, ожидающая своего появления.