Member 12658724 Ответов: 2

Вызов метода кода позади из другой модели представления


У меня есть вид Мой взгляд и соответствующая модель представления MyViewModel. Над Мой взгляд есть баннер(пользовательский контроль). Баннер используется многими видами. Его функция заключается в отображении уведомлений. Существует метод внутри кода баннера позади.

Теперь у меня есть команда кнопки в Мой взгляд Я хочу нажать на нее и отправить сообщение методу. Реализация команды button находится в MyViewModel.

Итак, как вызвать метод из MyViewModel?

Пожалуйста, не говорите мне, что это против MVVM. Я знаю это, но сейчас у меня нет выбора.

Что я уже пробовал:

c# - как я могу получить доступ к элементу управления в модели mvvm в viewmodel? - переполнение стека[^] Это очень полезно. Но не уверен, что это подходит для моего случая.

Richard Deeming

Возможно, вы ищете паттерн посредника[^]?

Member 12658724

Надеюсь, подсказка кода доступна для этого конкретного случая.

2 Ответов

Рейтинг:
1

Gerry Schmitz

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

У него должна быть своя "модель", которая реагирует на "входящие сообщения", отправленные от "других моделей" (или что-то еще).

Вы, по-видимому, рассматриваете его не как представление, а как "пользовательский контроль" (?); и поэтому ваше несчастье.


Member 12658724

Я не совсем понимаю ваш вклад. Не могли бы вы немного помочь с кодом?

Рейтинг:
0

George Swan

Мой подход, как бы то ни было, состоял бы в том, чтобы сделать что-то подобное. С помощью Prism.Events, объявить событие. В следующем примере полезной нагрузкой события является bool но вы можете использовать любой объект.

public class DatabaseServiceIsSavedEvent : PubSubEvent<bool>
   {

   }

В class тот, кто желает опубликовать событие, имеет экземпляр IEventAggregator aggregator затем, когда вы хотите поднять событие, вы можете опубликовать его следующим образом.

aggregator.GetEvent<DatabaseServiceIsSavedEvent>().Publish(true);

В этом случае полезная нагрузка представляет собой bool установлен в true.

В конструкторе самого class если вы хотите получить событие, вы подписываетесь на него, передавая метод, который вы хотите вызвать при возникновении события. Например.
aggregator.GetEvent<DatabaseServiceIsSavedEvent>()
              .Subscribe(OnIsSavedEvent);

То OnIsSavedEvent метод-это что-то вроде этого.
public void OnIsSavedEvent(bool isSaved)
       {
           IsModified = !isSaved;
       }


Member 12658724

Я попробую это сделать.