我正在使用VS 2017的MVVM方法开发一个简单的Xamarin.Forms应用程序。一切都在UWP中按预期工作,但我的Android项目不执行获取/设置ICommand属性的代码行。我可以在设置属性值的行上设置断点,以及之前的行和后面的行。我在前后两行都打破了,但没有设置属性的行。
这是我的模型代码:
public LoginPageViewModel(INavigation navigation) : base()
{
Navigation = navigation;
LoginButtonClicked = new Command(Login, () => true);
PasswordHintButtonClicked = new Command(PasswordHint, () => true);
}
我的XAML.cs:
btnLogin.SetBinding(Button.CommandProperty, nameof(vm.LoginButtonClicked), BindingMode.OneWay);
btnPasswordHint.SetBinding(Button.CommandProperty, nameof(vm.PasswordHintButtonClicked), BindingMode.OneWay);
正如我所说,我可以打破设置Navigation属性而不是命令属性。如果我将Navigation = navigation
移动到构造函数的最后一行,我仍然会打破它。
我也试过了:
private ICommand _loginButtonClicked;
public ICommand LoginButtonClicked
{
get { return _loginButtonClicked ?? (_loginButtonClicked = new
Command(Login, () => true)); }
}
这应该非常简单。也许我在配置Android模拟器时犯了一个错误?如果有人在看到正确的方向推动之前有人看到过这样的事情,那我几天就一直在反对这一点。
答案 0 :(得分:0)
您似乎需要在BindingContext
方法之前设置SetBinding
。
例如,如果代码如下所示:
public MainPage()
{
InitializeComponent();
LoginPageViewModel vm = new LoginPageViewModel();
BindingContext = vm;
btnLogin.SetBinding(Button.CommandProperty, nameof(vm.LoginButtonClicked), BindingMode.OneWay);
btnPasswordHint.SetBinding(Button.CommandProperty, nameof(vm.PasswordHintButtonClicked), BindingMode.OneWay);
}
然后它可以在设置属性并调用方法的行上中断。
您可以参考此link了解详情。
答案 1 :(得分:0)
如果有人遇到此问题,在我的情况下,它是由缺少Preserve
属性引起的。我已将属性添加到所有外部程序集,但我的视图模型也需要它。由于某种原因,链接器并没有引入整个类,即使它在.xaml.cs页面中被引用。