Xaml数据绑定字符串格式无效

eit6fx6z  于 2022-12-31  发布在  其他
关注(0)|答案(1)|浏览(178)

我尝试显示两个标签,其中包含绑定值+一些静态文本,并希望看到类似~50% Completed(stopped)的最终结果,但我看到的结果分别是100Stopped。但是,当我对其进行任何微小更改时,奇怪的事情就会发生(例如~{0}% Not Completed和热重新加载,它显示我想要的没有任何问题,但重新打开应用程序后,它不会显示我想要的。

<Label
    Text="{Binding Speed, StringFormat=~{0}% Completed}"
    HorizontalOptions="Center"
    FontAttributes="Bold"
    FontSize="Body"
    Margin="0,0,5,0"/>
<Label
    Text="{Binding Status, StringFormat=({0})}"
    HorizontalOptions="Center"
    FontAttributes="Bold"
    FontSize="Body"/>
euoag5mw

euoag5mw1#

奇怪的行为确实。我也可以复制那个错误(ish)。但是好消息是,你可以为你的目的使用转换器。
在maui项目中创建一个名为Converters的文件夹
创建这2个类

速度转换器.cs

namespace MauiApp.Converters;

class SpeedConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string speed = (string)value;
        return $"~{speed}% Completed";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

状态转换器.cs

class StatusConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string status = (string)value;
        return $"({status})";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在,在XAML文件中导入该命名空间

<ContentPage
    xmlns:converters="clr-namespace:MauiApp.Converters">

并像这样更改标签的文本绑定

<Label
  Margin="0,0,5,0"
  FontAttributes="Bold"
  FontSize="Body"
  HorizontalOptions="Center"
  Text="{Binding Speed, Converter={converters:SpeedConverter}}" />
        
<Label
  FontAttributes="Bold"
  FontSize="Body"
  HorizontalOptions="Center"
  Text="{Binding Status, Converter={converters:StatusConverter}}" />

相关问题