xamarin - Xamarin数据绑定如何绑定值乘以2
问题描述
我正在学习 Xamarin 数据绑定并学习以下代码:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DataBinding"
x:Class="DataBinding.MainPage">
<StackLayout>
<Label x:Name="label" Text="twisting" FontSize="70" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"
BindingContext="{x:Reference Name=slider}"
Rotation="{Binding Path=Value}">
</Label>
<Slider x:Name="slider" BackgroundColor="Yellow" Maximum="360" VerticalOptions="CenterAndExpand">
</Slider>
</StackLayout>
</ContentPage>
我想将加捻速度加倍,所以我修改了代码:
<Label x:Name="label" Text="twisting" FontSize="70"
HorizontalOptions="Center" VerticalOptions="CenterAndExpand"
BindingContext="{x:Reference Name=slider}"
Rotation="{Binding Path=Value*2}">
</Label>
但它根本不起作用。我知道以下解决方案有效,但我想要与上述相关的解决方案:
<Slider x:Name="slider" BackgroundColor="Yellow" Maximum="720" VerticalOptions="CenterAndExpand">
</Slider>
怎么做?
更新1
我将转换器自定义为以下代码:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Xamarin.Forms;
namespace DataBinding
{
public class MyValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var speed = value as int?;
return speed * 2;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
}
并修改 xaml 如下:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DataBinding"
x:Class="DataBinding.MainPage">
<StackLayout>
<Label x:Name="label" Text="twisting" FontSize="70" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"
BindingContext="{x:Reference Name=slider}"
Rotation="{Binding Path, Converter={StaticResource myCo
nverter}}">
</Label>
<Slider x:Name="slider" BackgroundColor="Yellow" Maximum="360" VerticalOptions="CenterAndExpand">
</Slider>
</StackLayout>
<ContentPage.Resources>
<ResourceDictionary>
<local:MyValueConverter x:Key="myConverter"></local:MyValueConverter>
</ResourceDictionary>
</ContentPage.Resources>
</ContentPage>
但是我的转换器无法正常工作,更重要的是,我下了一个断点,发现该Convert
功能甚至没有被触发。
更新2
我找到了原因,XAML 中的标签应该如下:
<Label x:Name="label" Text="twisting" FontSize="70" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"
BindingContext="{x:Reference Name=slider}"
Rotation="{Binding Path=Value, Converter={StaticResource myConverter}}">
</Label>
Convert 函数中的值类型是 double 而不是 string:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var tmp = (Double)value*2;
return tmp;
}
然后它工作。
解决方案
推荐阅读
- mysql - MySQL如何在过滤整数列时索引在列中搜索子字符串的查询
- azure - 通过 PowerShell 查找 Azure SQL 数据库异地复制辅助服务器
- javascript - 使用 vanilla javascript 删除本地存储项
- java - Spring 的 CachingConnectionFactory。为什么我们需要关闭会话,尽管它们要被缓存?
- javascript - javascript类对象中的点击事件后如何访问元素数据属性
- database - 从 sql 查询中仅选择某些原始数据
- python - 如何在不耗尽 RAM 的情况下创建额外的列,然后将其用于 ML 算法?
- curl - 为什么使用 curl 查询完整的网站会出现 405 错误?
- python - BeautifulSoup 找不到页面中的每个链接
- winapi - WinAPI Combobox 不能使用数字?