Где-то слышал, что не рекомендуется подписываться на события VM из View.
У меня в VM есть событие public event Action SomeEvent
на которое я подписываюсь в конструкторе страницы
public MyPage()
{
InitializeComponent();
var ViewModel = new ViewModel();
DataContext = ViewModel;
ViewModel.SomeEvent += SomeMethod;
}
При срабатывании события метод SomeMethod
на стороне View производит некоторые изменения.
Допустима ли такая конструкция и какие могут быть альтернативы?
Если делаеш через MVVM то используй команды вместо событий, во ViewModel
:
private RelayCommand someCommand;
public RelayCommand SomeCommand
{
get
{
return someCommand ??
(someCommand = new SomeCommand(obj =>
{
SomeMethod();
}));
}
}
Реализация RelayCommand:
public class RelayCommand : ICommand
{
private Action<object> execute;
private Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}
А в контроле который должен выполнять команду просто пропиши:
Command="{Binding SomeCommand}"
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делаю для своего WepAbpi сервера документациюПоскольку требуется просто базовое описание, решил использовать стандартный функционал от Microsoft...
У меня есть файл в котором хранятся нужные строчки которые нужно извлечь, для извлечения одной части записи работает такой код: