Допустимо ли подписываться на события ViewModel из View

142
20 мая 2019, 19:10

Где-то слышал, что не рекомендуется подписываться на события VM из View. У меня в VM есть событие public event Action SomeEvent на которое я подписываюсь в конструкторе страницы

public MyPage()
{
    InitializeComponent();
    var ViewModel = new ViewModel();
    DataContext = ViewModel;
    ViewModel.SomeEvent += SomeMethod;
}

При срабатывании события метод SomeMethod на стороне View производит некоторые изменения. Допустима ли такая конструкция и какие могут быть альтернативы?

Answer 1

Если делаеш через 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}"
READ ALSO
Настройка Help Page для ASP.NET WebApi

Настройка Help Page для ASP.NET WebApi

Делаю для своего WepAbpi сервера документациюПоскольку требуется просто базовое описание, решил использовать стандартный функционал от Microsoft...

161
Как извлечь из файла нужные строки?

Как извлечь из файла нужные строки?

У меня есть файл в котором хранятся нужные строчки которые нужно извлечь, для извлечения одной части записи работает такой код:

184
Экспорт ArcSegment в DXF.Arc

Экспорт ArcSegment в DXF.Arc

Как экспортировать ArcSegment в DXFArc? С # WPF

149
Построчное считывание из файла

Построчное считывание из файла

Не могу закинуть в массив string данные из файла

176