View A传递Calculation对象至View B后无法访问hrs参数报错求助
嘿,我来帮你搞定这个头疼的问题!你碰到的“object does not contain a definition for 'hrs'”错误,基本逃不出下面这几个原因,咱们一步步排查修复:
问题根源及解决方案
1. 先检查你的Calculation类成员权限
大概率是你Calculation类里的hrs、cse这些字段/属性的访问修饰符不对——如果是private的话,外部的Results页面根本没权限访问它们。
赶紧把这些成员改成public,用属性的写法更规范(当然公共字段也能凑活,但属性是.NET的最佳实践):
public class Calculation { public string hrs { get; set; } public string cse { get; set; } public string aqe { get; set; } }
2. Results页面(View B)接收参数的姿势不对
你在View A里把calc对象传给了Results,但如果Results页面没正确接收、或者把它当成了object类型存储,就会出现找不到属性的错误。
给Results页面加个专门的构造函数,接收Calculation类型的参数,并且存成类的成员变量:
public partial class Results : ContentPage { private Calculation _userCalculation; // 构造函数直接接收Calculation对象 public Results(Calculation calc) { InitializeComponent(); _userCalculation = calc; // 现在就能正常访问hrs属性给Label赋值了 YourResultLabel.Text = _userCalculation.hrs; } }
3. 确认View A的跳转代码没写错
你提供的跳转代码有点截断,要确保是把创建好的page对象传给PushModalAsync,别漏了:
async void Calculate_btn(object sender, EventArgs e) { Calculation calc = new Calculation() { hrs = "qwe", cse = "rty", aqe = "uio" }; var page = new Results(calc); await Navigation.PushModalAsync(page); // 这里一定要传入page对象! }
最后再补两个检查点
- 别忘了确认Results页面的命名空间和Calculation类的命名空间一致,或者已经引用了Calculation所在的命名空间,不然会出现类型找不到的问题。
- 如果是用数据绑定来显示Label内容,记得把页面的
BindingContext设为_userCalculation,比如在构造函数里加BindingContext = _userCalculation;,然后Label的Text绑定到hrs就行。
内容的提问来源于stack exchange,提问作者Jeppe Christensen
相关产品推荐
相关产品推荐

