Как вызвать метод управления пользовательским интерфейсом из ViewModel (MVVM)? - PullRequest
4 голосов
/ 06 апреля 2011

Я хочу вызвать AutoComepleteBox s PopulateComplete () из ViewModel как мне это назвать?

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Поведение с использованием System.Windows.Interactivity - отличный способ сделать это.

Взгляните на это - http://julmar.com/blog/mark/?p=34 - в этом случае он использует его для водяного знака, но вы можете легко адаптировать поведение ... Я часто ссылаюсь на этот пост в блоге в качестве отправной точки.

Главное в поведении - это то, что вы получаете доступ к вещам, к которым вы не могли привязать события, к которым вы не можете прикрепить модель представления, для их выяснения требуется несколько минут, но один вечер накушетка, читая некоторые блоги и MSDN, и вы будете большим поклонником!

1 голос
/ 06 апреля 2011

Представление должно обрабатывать все, что связано с пользовательским интерфейсом и представлением - в идеале вы должны вызывать PopulateComplete() из самого представления.Исходя из вашего комментария к ответу BrandonZeider, я бы посоветовал вам создать событие в ViewModel, которое запускается по завершении метода обслуживания, и поместить ваш вызов PopulateComplete() в обработчик этого события в представлении.

Теперь вы можете использовать вашу ViewModel где угодно - если что-то должно произойти в представлении после завершения вызова службы, он может просто подписаться на новое событие.

0 голосов
/ 06 апреля 2011

Есть несколько разных способов сделать это, это зависит только от того, что вы пытаетесь сделать ... откуда в вашей ViewModel вы пытаетесь вызвать PopulateComplete ()? Например, если вы находитесь в экземпляре ICommand , вы можете передать элемент управления в качестве параметра, привести его и вызвать ваш метод.

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

Добавьте прослушиватель событий к представлению в коде позади, прослушивая событие изменения коллекции в вашей модели представления. Затем вы можете вызвать PopulateComplete () в обработчике событий. Вам понадобится ссылка на вашу ViewModel в вашем View, чтобы это работало.

Другой вариант - передать ссылку на AutoComepleteBox в ViewModel при загрузке представления (используя EventTrigger) и сохранить эту ссылку в закрытом поле. Затем, когда ваш вызов веб-службы вернется, используйте эту ссылку для вызова PopulateComplete ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...