2013-11-11 4 views
0

Я новичок в Events, пытаясь построил MVVM ......Confused События и RelayCommand (C#)

** Вопрос 1:

Ссылаясь на некоторые интернет-пример переопределения ArrayList класс с событиями: http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

public delegate void ChangedEventHandler(object sender, EventArgs e); 
public class ListWithChangedEvent: ArrayList 
{ 
    public event ChangedEventHandler Changed; 
    protected virtual void OnChanged(EventArgs e) {if (Changed != null) Changed(this, e);} 
    ... 
} 

Я правильно сказать, что если я переопределить любой класс, добавив событие в него, когда был изменен/называется любой член/метод внутри перекрытая класса, метод OnChanged воли автоматически запускаться? (И я могу видеть его при отладке?)

** Вопрос 2:

К сожалению совсем запутался с тем, что делает внутри RelayCommand. В частности, почему в EventHandler CanExecuteChanged он добавляет и затем удаляет метод из ConfigurationManager одновременно?

Заранее спасибо.

ответ

0

Что касается вашего 1-го вопроса, я думаю, вы что-то неправильно поняли; просто добавление метода, называемого OnChanged, не имеет эффекта, который вы описываете. Как и любой другой метод, он должен быть вызван другим кодом, который должен быть выполнен. Поскольку базовый класс и его методы ничего не знают о производном классе, они не вызывают метод/событие - и даже не «по соглашению», потому что он называется OnChange.
Я не уверен, правильно ли понимаю ваш второй вопрос. Событие CanExecuteChanged используется для уведомления пользовательского интерфейса о том, что что-то изменилось, что влияет на выполнение или невозможность выполнения команды. Я не знаю вашего кода или образца, о котором вы говорите в отношении ConfigurationManager, но удаление и добавление обработчика событий обычно выполняется, чтобы утверждать, что обработчик событий зарегистрирован ровно один раз. Если вы регистрируете обработчик событий несколько раз, он вызывается несколько раз - такое поведение редко бывало. Поэтому вы удаляете обработчик событий, прежде чем регистрировать его заново.

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