Смысл того, что я делаю, заключается в том, что в модели представления должно происходить много вещей, но когда представление загружено, а не в конструкторе. Я мог бы подключить обработчики событий и отправлять сообщения, но мне это кажется немного неаккуратным. Я реализую базовое представление и базовое представление, где содержится эта логика, поэтому, надеюсь, все мои представления получат ее по умолчанию.
Возможно, я даже не могу получить то, что хочу: отправитель. Я просто подумал, что это то, что RoutedEventArgs.OriginalSource должен был быть?
[Edit] Тем временем, я подключил EventHandler в xaml.cs, и, конечно же, там тоже есть NULL. Так что, думаю, мне действительно нужно знать, возможно ли получить ссылку на представление / отправителя в команде? [/ Edit]
Моя реализация требует, чтобы вспомогательный класс для моих viewmodels, отвечающий за создание «окон», знал об элементе управления «хост», к которому добавляются все окна. Я открыт для предложений для достижения этой цели за пределами использования eventtocommand. :)
(код для Unloaded такой же)
#region ViewLoadedCommand
private RelayCommand<RoutedEventArgs> _viewLoadedCommand = null;
/// <summary>
/// Command to handle the control's Loaded event.
/// </summary>
public RelayCommand<RoutedEventArgs> ViewLoadedCommand
{
get
{
// lazy-instantiate the RelayCommand on first usage
if (_viewLoadedCommand == null)
{
_viewLoadedCommand = new RelayCommand<RoutedEventArgs>(
e => this.OnViewLoadedCommand(e));
}
return _viewLoadedCommand;
}
}
#endregion ViewLoadedCommand
#region View EventHandlers
protected virtual void OnViewLoadedCommand(RoutedEventArgs e)
{
EventHandler handler = ViewLoaded;
if (handler != null)
{
handler(this, e);
}
}
#endregion