Как изменить значение свойства MVVM в CodeBehind - PullRequest
0 голосов
/ 11 апреля 2020

Я очень долго пытался решить следующую проблему, но, к сожалению, не могу ее решить.

У меня есть кнопка, которую я хочу отключить на другой странице .cd

Вот так выглядит мой код:

<StackLayout>
 <Button Text="Click" IsEnabled="{Binding IsButtonEnabled}" Command="{Binding OnEnabledButtonClicked}"/>
</StackLayout>
public class MainPageViewModel : BaseViewModel
{

  bool _isButtonEnabled;
  public bool IsButtonEnabled
  {
      get => _isButtonEnabled;
      set
      {
         _isButtonEnabled = value;
         OnPropertyChanged(nameof(IsButtonEnabled));
      }
  }

  public Command OnEnabledButtonClicked 
  {
     get
     {
         return new Command( () =>
         {
            IsButtonEnabled = true;
         }
     }
  }

}

И это класс, в котором я хочу изменить значение кнопки виртуальной машины.

public class Page1 {

  class page1() {

    InitializeComponent();

  }

  public void OnDisabledButtonClicked(object sender, EventArgs e) {

    /// IsButtonEnabled = false;

  }

}

Я уже пробовал разные способы, но все еще безрезультатно ,

Было бы очень полезно для меня, если бы кто-то дал мне решение для этого.

Заранее спасибо

1 Ответ

0 голосов
/ 11 апреля 2020

Прежде чем дать вам ответ, я бы хотел отметить несколько вещей. Как правило, суффикс вашей команды: Command: EnabledButtonCommand. Я вижу, что ваша команда asyn c, пока вы ничего не ждете. Это плохо.

Почему вы хотите установить IsButtonEnabled в коде, а не в методе, выполняемом командой (во ViewModel)?

Где вы устанавливаете DataContext? Используете ли вы Prism или что-то еще, чтобы связать ViewModel с DataContext вашей страницы? Если вы этого не сделаете, вам нужно сделать следующее:

public class MyPage()
{
    private MyViewModel _viewModel = new MyViewModel();

    public MyPage()
    {
        InitializeComponent();
        DataContext = _viewModel;
    }

    public void OnDisabledButtonClicked(object sender, EventArgs e)
    {
        _viewModel.IsButtonEnabled = false;
    }
}

Если ваша ViewModel была установлена ​​в Xaml или в другом месте (во время навигации с помощью Prism и т. Д. c)

public class MyPage()
{
    private MyViewModel _viewModel;

    public MyPage()
    {
        InitializeComponent();
        _viewModel = DataContext as MyViewModel;
    }

    public void OnDisabledButtonClicked(object sender, EventArgs e)
    {
        _myViewModel.IsButtonEnabled = false;
    }
}

Последнее слово: если кнопка не активирована, событие команды / щелчка не будет доступно пользователю до тех пор, пока кнопка снова не будет активирована.

Это можно проверить с помощью кнопки, команда которой связана с заданная команда и другая кнопка с привязкой IsEnabled к вашему логическому значению.

Приведенный мною код может привести к ошибкам при ответе в браузере без использования EDI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...