Как сделать слабую связь команды программно? - PullRequest
0 голосов
/ 21 октября 2019

Я делаю мобильное приложение, используя Xamarin. И использование Prism для достижения MVVM со слабой связью между Views и ViewModels. В одном представлении я создаю кнопки программным образом из кода, например:

var button = new Button {
  Text = e.ToString(),
  Command = 
};                
Container.Children.Add(button);

Кнопки создаются, но мне еще предстоит найти способ привязать свойство команды к команде в ViewModel,Я хочу связать это свободно. Согласно MVVM View не может ничего знать о ViewModel. Если бы я тоже хотел параметризовать команду, многое бы изменилось? Есть ли способ добиться этого? Любая помощь будет оценена.

1 Ответ

1 голос
/ 22 октября 2019

вы можете создать Command в вашем ViewModel, а затем использовать свойство Command для установки привязки в вашем представлении, например:

в вашем представлении (вашей странице):

LoginViewModel viewModel = new LoginViewModel();
BindingContext = viewModel
Button loginButton = new Button
 {
   Text = "LOGIN",
 };
loginButton.SetBinding(Button.CommandProperty, new Binding("LoginFormCommand"));

в ViewModel (LoginViewModel):

public class LoginFormViewModel 
 {
   public ICommand LoginFormCommand { get; private set; }
   private string _user;
   private string _pass;
   public LoginViewModel()
     {
      LoginFormCommand = new Command(LogUserIn());
     }
   public string User {
    get => _user; 
    set
     {
      if (_userName != value){ _userName = value;}
      OnPropertyChanged();
     }
    }
  public string Pass {
   get => _pass; 
   set
    {
     if (_userName != value){ _userName = value;}
     OnPropertyChanged();
    }
  }
 public LogUserIn()
  {
   bool IamLoggedIn = AFunctionThatCallsAWebService(User, Pass);
  }
 }
...