Xamarin Forms绑定FixedAssetId提示ViewModel不存在该属性如何解决
错误原因
- 你在ContentPage根节点设置了全局编译绑定类型为
MainPageViewModel,但ListView的ItemTemplate内的绑定上下文是每条数据对应的Employee类,编译时系统会默认到MainPageViewModel里查找你绑定的属性,找不到自然就报错。 - 你要展示的是
FixedId属性,但当前XAML里写的绑定是FixedAssetId,属性名不匹配也会触发找不到属性的错误。 - 异步方法调用不规范,可能触发死锁或者数据更新不及时的问题。
解决步骤
- 调整XAML的编译绑定配置
先在ContentPage的命名空间声明里添加Employee类所在命名空间的引用,比如你的Employee放在App3.Models下就加:
xmlns:models="clr-namespace:App3.Models"
然后给DataTemplate指定单独的DataType:
<DataTemplate x:DataType="models:Employee">
- 匹配属性名
如果你的Employee类里的ID属性是FixedId,就把Label的绑定改成对应名称,同时确认Employee类里的FixedId是公共属性:
public class Employee { // 确保属性名和绑定的名称完全一致,大小写敏感 public string FixedId { get; set; } // 其他属性 }
- 修正异步代码的问题
不要用.Result去取异步方法的返回值,会导致UI线程死锁,把GetEmployees方法里两处result.Content.ReadAsStringAsync().Result改成await result.Content.ReadAsStringAsync()。
另外RefreshCommand调用异步方法的时候要加await,把Command的定义改成:
public ICommand RefreshData { get; } // 在你的ViewModel构造函数里添加初始化逻辑 public MainPageViewModel() { RefreshData = new Command(async () => { IsRefreshing = true; await GetEmployees(); IsRefreshing = false; }); }
内容的提问来源于stack exchange,提问作者jude camp
相关产品推荐
相关产品推荐

