Xamarin.Forms 2.5导航问题:升级后重写项目遇页面创建异常
我明白你现在的处境——更新Visual Studio和Xamarin.Forms版本后旧项目报错,索性决定重写应用,却发现新版里创建页面只能选XAML页面类型,还担心之前旧版里的按钮点击事件逻辑怎么在新版里落地对吧?别慌,咱们一步步来解决这些问题:
一、关于新版Xamarin.Forms的页面创建
其实新版Xamarin.Forms(尤其是5.x及后续版本)默认创建的XAML页面是自带代码隐藏文件的,只是你可能没注意到:
- 当你创建
MainPage.xaml这类页面时,解决方案资源管理器里展开这个XAML文件,就能看到对应的MainPage.xaml.cs文件——这就是用来存放后台逻辑(比如按钮点击事件)的地方,和你旧版项目里的代码存放位置本质是一样的。
二、按钮点击事件的迁移实现
针对你旧版里MainPage.xaml和gridPage()中的按钮点击逻辑,这里给你两种适配新版的方案:
方案1:直接沿用XAML绑定事件的写法(和旧版逻辑完全对齐)
这是最快速的迁移方式,和你旧版的写法几乎一致:
- 在XAML文件中给按钮添加
Clicked属性,指定事件处理方法名:
<Button Text="测试按钮" Clicked="OnTestButtonClicked" />
- 在对应的
.xaml.cs文件中实现这个事件处理方法,把你旧版里的逻辑直接搬过来就行:
private void OnTestButtonClicked(object sender, EventArgs e) { // 这里粘贴你旧版里的点击逻辑,比如跳转gridPage: Navigation.PushAsync(new GridPage()); // 或者其他业务逻辑,比如弹出提示: DisplayAlert("提示", "按钮被点击了", "确定"); }
方案2:改用MVVM命令绑定(新版Xamarin.Forms推荐写法)
如果你想贴合新版的最佳实践,也可以用MVVM模式来实现按钮点击,这会让代码结构更清晰:
- 先创建一个ViewModel类,实现命令逻辑(可以用
RelayCommand,如果没有的话,需要先安装Xamarin.Forms.ToolkitNuGet包,或者自己简单实现一个):
public class MainViewModel { public ICommand TestButtonCommand { get; } public MainViewModel() { TestButtonCommand = new RelayCommand(ExecuteTestButtonAction); } private void ExecuteTestButtonAction() { // 这里写你的按钮点击逻辑,比如页面跳转、数据处理等 } }
- 在XAML页面中绑定这个命令:
<Button Text="测试按钮" Command="{Binding TestButtonCommand}" />
- 最后在页面的
.xaml.cs中设置BindingContext,让XAML能找到ViewModel:
public MainPage() { InitializeComponent(); BindingContext = new MainViewModel(); }
三、关于gridPage的按钮逻辑迁移
你旧版里gridPage()中的测试按钮点击逻辑,只需要把对应的代码片段,按照上面两种方案中的任意一种,放到新版GridPage的代码隐藏文件或者对应的ViewModel里就行——核心业务逻辑是通用的,只要和新版的页面结构匹配上就没问题。
内容的提问来源于stack exchange,提问作者Anjali
相关产品推荐
相关产品推荐

