首页 > 解决方案 > 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;
}

然后它工作。

标签: xamarindata-binding

解决方案


推荐阅读