所以我有一些允许用户控制滑块输入高度的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;
}