2015-03-24 2 views
0

Я создал элемент управления списком задач. У меня есть метод AddTask. Я хотел бы вызвать этот метод из окна хоста.Метод вызова WPF при управлении пользователем с привязкой

Я нашел несколько сообщений здесь, в SO и других сайтах, которые предлагают использовать интерфейс, затем перебирают все элементы управления в окне, чтобы найти элемент управления, а затем получить ссылку на него и использовать его для вызова метода. Вот пример: Call method on various user controls

Но можно ли вызвать метод как-то со связыванием? Предположим, что кто-то использует MVVM, и виртуальная машина Windows хочет запустить метод AddTask элемента управления. Это возможно?

Спасибо!

+0

Почему у него есть метод AddTask? Должен ли он взять список задач как обязательный? – nvoigt

+0

Поскольку приложение AddTask откроет диалоговое окно «Задачи», и если оно сохранено, добавьте его в список. Все функции инкапсулированы в UC. – CoderForHire

ответ

0

Если вы действительно хотите сделать это (в возможной) правильной форме, я бы сказал вам написать о MVVM.

Binding и методы работают очень хорошо в MVVM с помощью команд

Вот это мое решение

  1. Создание класса ViewModel
  2. Создание вложенного класса MyCommandBehaviour, который реализует ICommand (некоторые люди создают класс в другом классе)
  3. В модели создания объекта введите MyCommandBehaviour MyCommand
  4. В конструкторе модели представления экземпляр, что свойство
  5. In The XAML связать кнопку {Binding MyCommand}
  6. Установите DataContext окно (или пользовательский элемент управления) для модели представления

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

 public class OkCommand : System.Windows.Input.ICommand 
     { 
      private MyViewModel _vm; 
      public OkCommand(MyViewModel vm)    
      { 
       this._vm = vm; 
      } 

      public bool CanExecute(object parameter) 
      { 
       return true;//I never use this and the event below 
      } 

#pragma warning disable 0067 
      public event EventHandler CanExecuteChanged; 
#pragma warning restore 0067 

      public void Execute(object parameter) 
      { 
       //do your stuff. Note you can access the MyViewModel members here via _vm 
      } 
     } 
Смежные вопросы