Я пытаюсь понять шаблон MVVM, и поэтому я начал изучать концепции привязки и команд в C #.Чтобы понять этот шаблон, я создал простой графический интерфейс для прокси-сервера.В графическом интерфейсе есть две кнопки, одна для запуска и одна для остановки сервера.
Если пользователь запускает прокси-сервер, нажимая кнопку запуска, я хотел бы отключить кнопку запуска и включить кнопку остановки.Таким образом, я могу быть уверен, что метод stop proxy может быть вызван только во время работы прокси.Когда пользователь нажимает кнопку остановки прокси, я бы хотел снова включить кнопку запуска прокси.
Я приказываю понять, что создал класс viewmodel, который выглядит следующим образом:
class ViewModelBase {
public ICommand StartProxy { get; set; }
public ICommand StopProxy { get; set; }
public bool IsProxyRunning = false;
public ViewModelBase() {
StartProxy = new StartProxy(StartProxyMethod);
StopProxy = new StopProxy(StopProxyMethod);
}
private void StartProxyMethod(object Parameter) {
MessageBox.Show("Implement the start proxy method here");
IsProxyRunning = true;
}
private void StopProxyMethod(object Parameter) {
MessageBox.Show("Implement the stop proxy method here");
IsProxyRunning = false;
}
}
Код для прокси-команд start и stop следующий:
StartProxy
public class StartProxy : ICommand {
Action<object> StartProxyMethod;
public event EventHandler CanExecuteChanged;
public StartProxy(Action<object> StartProxyMethod) {
this.StartProxyMethod = StartProxyMethod;
}
public bool CanExecute(object Parameter) {
//How to check if the proxy is not running (if so, this method can be executed)
return true;
}
public void Execute(object Parameter) {
StartProxyMethod(Parameter);
}
}
StopProxy
public class StopProxy : ICommand {
Action<object> StopProxyMethod;
public event EventHandler CanExecuteChanged;
public StopProxy(Action<object> StopProxyMethod) {
this.StopProxyMethod = StopProxyMethod;
}
public bool CanExecute(object Parameter) {
//How to check if the proxy is running (if so, this method can be executed)
return true;
}
public void Execute(object Parameter) {
StopProxyMethod(Parameter);
}
}
Теперь мне интересно, как мне этого добиться.Я подумал, что могу передать переменную IsProxyRunning
в StartProxyMethod и StopProxyMethod (в viewmodel) и делегировать значение переменной кнопкам в графическом интерфейсе.Однако это не сработало, как ожидалось.
Мне кажется, что я не смотрю в правильном направлении, чтобы заархивировать свою цель, если у вас есть идея, где я ошибаюсь, я бы хотел знать.