我的主页上有一个导航到下一个视图的按钮。在Windows PC(Visual Studio 2017)上的模拟android设备(Android 8.1加速的x86)上的调试版本中,此方法非常有用。
按钮从这样的视图中绑定到我的视图模型:
<Button Text="Report error" Command="{Binding NewErrorCommand}" />
viewmodel代码:
public Command NewErrorCommand
{
get
{
return _newErrorCommand ?? (_newErrorCommand = new Command(ExecuteNewErrorCommand, CanNewErrorCommand));
}
}
private bool CanNewErrorCommand(object arg)
{
return true;
}
private async void ExecuteNewErrorCommand(object obj)
{
try
{
// I'll get here in simulation/debug build but not in release build on device
await Application.Current.MainPage.DisplayAlert("Go", "Go", "Ok");
await _navigation.PushAsync(new TestView(), false);
}
catch (Exception exc)
{
await Application.Current.MainPage.DisplayAlert("Error", exc.Message, "Cancel");
}
}
我的整个应用程序在模拟器上运行正常。如果我在实际的物理设备上按了按钮,则会看到视觉反馈(按钮会更改颜色),但是什么也没有发生。
到目前为止我尝试过的事情:
DisplayAlert
进行了一些printf调试(未命中,请参见源代码)您可以帮助Xamarin.Forms初学者吗?
更新
我通过USB连接了Android手机以进行调试。该按钮在调试模式下起作用(达到断点,打开新页面),但在发行版本中仍然无法使用。
根据请求的链接器设置:
答案 0 :(得分:1)
如果您在Android项目属性的Build
部分中将链接选项设置为“仅SDK程序集”,则发行版本将可用。
启用linker并将其设置为“ SDK和用户程序集”后,将删除大量代码(被压为不使用)。在您的情况下,NewErrorCommand
属性被删除,因为该工具假定您没有使用它。
如果将其设置为“仅SDK程序集”,它将起作用,因为在这种配置下,链接器不会碰到任何您自己的程序集。