You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI中如何将ContentPage的Title绑定到模型实现动态本地化?

解决方案

首先修正本地化资源内容:确保AppRes.CountOfObjects的字符串包含占位符{0},比如英文环境下设置为"{0} objects in your inventory",其他语言对应调整为带{0}的格式(例如中文:"你的库存中有{0}个物品")。

方法一:直接绑定+StringFormat引用本地化静态资源

在XAML中直接使用绑定的StringFormat属性引用本地化资源,此时绑定值会自动替换资源字符串中的{0}占位符:

Title="{Binding MyModel.CountOfObjects, StringFormat={x:Static res:AppRes.CountOfObjects}}"

注意:如果本地化资源字符串包含引号,需要在资源文件中用\"进行转义。

方法二:通过ViewModel计算属性实现

如果需要更灵活的逻辑处理,可在ViewModel中添加一个计算属性,将绑定值与本地化字符串组合:

// 假设ViewModel实现了INotifyPropertyChanged或使用CommunityToolkit.Mvvm的ObservableObject
public string InventoryTitle
{
    get => string.Format(AppRes.CountOfObjects, MyModel.CountOfObjects);
}

然后在XAML中绑定该属性:

Title="{Binding InventoryTitle}"

若MyModel.CountOfObjects的值会动态变化,需在MyModel.CountOfObjects的属性变更时,触发InventoryTitle的PropertyChanged事件(使用CommunityToolkit.Mvvm时可通过SetProperty或NotifyPropertyChanged实现)。

原写法问题说明

你之前的写法存在两处错误:

  • 本地化资源AppRes.CountOfObjects包含了固定数字,而非带占位符的格式字符串,导致绑定值与静态字符串拼接后出现重复内容;
  • 在StringFormat的引号内直接使用x:Static不会被XAML解析,只会被当作普通文本处理,无法正确引用本地化资源。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:30:53