XAML:使用IValueConverter将指标转换为英制

时间:2017-10-03 12:57:43

标签: c# xaml xamarin.forms ivalueconverter

所以我有一些允许用户控制滑块输入高度的XAML。然后我有一个绑定到此值的标签,以显示滑块的十进制值。这是度量值(cm),因此我显示了简单的数字:

<Label Text="Height (cm):" HorizontalTextAlignment="Start" />
<StackLayout x:Name="HeightSliderContainer">
    <Slider x:Name="HeightSlider" Maximum="250" Minimum="100" Value="175" />
    <Label x:Name="HeightSliderLabel" BindingContext="{x:Reference HeightSlider}" Text="{Binding Value, StringFormat='{0:F0}'}" />
</StackLayout>

这很有效。 我现在想在这个数字旁加上英制转换,以显示那些老学校用户的身高/英尺。所以我写了一个实现IValueConverter的转换器,这很好用,接受滑块的值(double)并返回格式为“5ft 10in”的字符串。 但是,我无法在我的XAML中获取此值,我只得到标签的空字符串:

<Label Text="Height (cm):" HorizontalTextAlignment="Start" />
<StackLayout x:Name="HeightSliderContainer">
    <Slider x:Name="HeightSlider" Maximum="250" Minimum="100" Value="175" />
    <Label x:Name="HeightSliderLabel" BindingContext="{x:Reference HeightSlider}" Text="{Binding Value, StringFormat='{0:F0}'}" />
    <Label Text="(" />
    <Label x:Name="HeightSliderLabelImperial" BindingContext="{x:Reference HeightSlider}" 
           Text="{Binding Value, Converter={StaticResource MetricToImperialHeightTypeConverter}}" />
    <Label Text=")" />
</StackLayout>

所以输出只是:

  

150()

而不是

  

150(4英尺11英寸)

我是否需要添加到我的XAML以使其呈现返回的字符串?我已经通过我的IValueConverter并确认它在调用时返回一个包含正确数据的字符串。

由于

修改

还应该在另一个页面上添加那个没有滑块的地方,我只是显示保存的值,我有以下内容:

<Label x:Name="HeightLabelImperial" Text="{Binding User.HeightInCm,
Converter={StaticResource MetricToImperialHeightTypeConverter}}" />

这样可以正常工作,例如将高度显示为“4英尺11英寸”,所以它与bindingcontext和滑块输入的值有关,或者我倾向于思考。

EDIT2:

转换代码:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int cm = 0, feet = 0, inches = 0;
        cm = System.Convert.ToInt32((double)value);
        UnitConverter.CMToFeetAndInches(cm, out feet, out inches);

        string result = $"{feet}ft {inches}in";

        return result;            
    }

0 个答案:

没有答案