Xamarin Forms中MvxListView可填充数据,但MvxTextCell绑定文本不显示
问题分析
- MvxTextCell绑定方式错误:使用了Xamarin Forms原生绑定语法
Text="{Binding .}",但MvvmCross控件需通过专属的MvxBind属性完成绑定,原生语法无法被Mvx绑定系统识别。 - AddCommand参数冗余:定义了带string参数的命令,但实际未使用该参数,直接访问私有字段
_newItem,逻辑不严谨。 - MyList属性的RaisePropertyChanged参数错误:使用
nameof(_myList)(字段名)而非nameof(MyList)(属性名),虽添加元素时ObservableCollection会自动通知集合更新,但替换整个集合时会导致属性变更通知失效。
解决方案
1. 修正MvxTextCell的绑定语法
将XAML中MvxTextCell的绑定改为MvvmCross专属语法:
<mvx:MvxListView.ItemTemplate> <DataTemplate> <mvx:MvxTextCell MvxBind="Text ." TextColor="Black"/> </DataTemplate> </mvx:MvxListView.ItemTemplate>
若页面已指定x:DataType,建议给DataTemplate也指定类型以提升绑定解析准确性:
<mvx:MvxListView.ItemTemplate> <DataTemplate x:DataType="x:String"> <mvx:MvxTextCell MvxBind="Text ." TextColor="Black"/> </DataTemplate> </mvx:MvxListView.ItemTemplate>
2. 优化ViewModel的AddCommand逻辑
移除冗余参数,让命令逻辑更清晰:
// 替换原AddCommand定义 public IMvxCommand AddCommand => new MvxCommand(AddItem); private void AddItem() { if (!string.IsNullOrWhiteSpace(NewItem)) { MyList.Add(NewItem); NewItem = string.Empty; } }
3. 修正MyList属性的RaisePropertyChanged参数
public ObservableCollection<string> MyList { get { return _myList; } set { if (_myList != value) { _myList = value; // 修正为属性名而非字段名 RaisePropertyChanged(nameof(MyList)); } } }
备选验证方案
若上述修改后仍无效果,可改用普通ViewCell包裹Label验证绑定是否正常:
<mvx:MvxListView.ItemTemplate> <DataTemplate x:DataType="x:String"> <ViewCell> <Label Text="{Binding .}" TextColor="Black" Padding="10"/> </ViewCell> </DataTemplate> </mvx:MvxListView.ItemTemplate>
若此方案能正常显示文本,说明MvxTextCell存在版本适配问题,可暂时用该方案替代。
内容的提问来源于stack exchange,提问作者VROLL
相关产品推荐
相关产品推荐

