WPF Commands --- Как правильно подключиться к ViewModel из View for logic? - PullRequest
0 голосов
/ 27 ноября 2018

Я видел довольно много разных постов по этому поводу, но все еще не понимаю, как правильно это сделать.Я реализую RelayCommand и IRequireViewID для таких вещей, как вызов класса WindowsManager для закрытия окон из представления, когда ему не нужно знать, какое окно оно вызывает, и т. Д. Однако в подобных ситуациях я не уверен, как это сделать.реализовать все правильно.

Так что в основном у меня есть команда в viewModel, где вы нажимаете кнопку, и мне нужно сохранить данные в БД, как только это произойдет.Как у меня есть команда в представлении, но затем поместить логику для этого в ViewModel?IE, в основном ViewModel нужно знать, когда вызывается команда.Я имею в виду, что я всегда мог бы поместить статический метод в модель представления и вызвать его из представления, но я предполагаю, что, вероятно, это не очень хороший способ для его реализации, т.е. MyViewModel.RedValidation из представления.

Класс RelayCommand

public class RelayCommand : ICommand
{
    private Action commandTask;

    public RelayCommand(Action commandToRun)
    {
        commandTask = commandToRun;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;
    public void Execute(object parameter)
    {
        commandTask();
    }
}

Просмотр

public ICommand ValidateRed
{
    get => new RelayCommand(RedValidation);
}

 private void RedValidation()
 {
     //SAVE Data To DB <----This should be in the ViewModel though right?

 }

XAML:

    <Button Name="ValidateBtn" Style="{StaticResource mainButtons}" Content="Validate Email" Width="100" 
            HorizontalAlignment="Left" Command="{Binding ValidateRed}"/>

1 Ответ

0 голосов
/ 27 ноября 2018

Все, что у вас есть в «View», должно быть в «ViewModel».Команды - это свойства модели представления, а не представления (также вы не должны связываться с представлением в 99% случаев).

После того, как вы изменили это, оно должно встать на место так, как выожидать.

...