为了账号安全,请及时绑定邮箱和手机立即绑定

在 Xamarin Forms 中编辑 ListView 所选项的 Label

在 Xamarin Forms 中编辑 ListView 所选项的 Label

C#
慕盖茨4494581 2022-12-04 11:13:16
我需要根据 ListView 的选定 Slider 的值来编辑 Label 值。当滑块的值大于 2 且小于 20 时,标签的文本应更改为“已编辑”我唯一拥有的是以下代码。可以用不同的方式来做吗?public partial class MainPage : ContentPage{    readonly List<Tarea> listaTarea = new List<Tarea>();    public MainPage()    {        InitializeComponent();        llenarLista();        listaEjemplo.ItemsSource = listaTarea;    }    public void llenarLista()    {        listaTarea.Add(new Tarea{            nombre = "Alex1",            valor="10",            descripcion = "Ejemplo"        });        listaTarea.Add(new Tarea        {            nombre = "Alex2",            valor = "20",            descripcion = "Ejemplo"        });        listaTarea.Add(new Tarea        {            nombre = "Alex3",            valor = "30",            descripcion = "Ejemplo"        });        listaTarea.Add(new Tarea        {            nombre = "Alex4",            valor = "40",            descripcion = "Ejemplo"        });        listaTarea.Add(new Tarea        {            nombre = "Alex5",            valor = "50",            descripcion = "Ejemplo"        });        /*        if(listaTarea[2].valor.Equals("30"))        {            listaTarea[2].descripcion = "Cambiado";        }*/    }    void Handle_ValueChanged(object sender, Xamarin.Forms.ValueChangedEventArgs e)    {        var sliders = sender as Slider;        var item = sliders.Parent.BindingContext as Tarea;        double valor = sliders.Value;        if(valor > 2 && valor<20)        {            item.nombre = "Editado";        }    }}
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

解决方案: 正如 Ivan 所说,您可以使用Converter


请参考以下代码。


public class ValueToTextConverter : IValueConverter

{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

    {

        if ((double)value < 20 && (double)value > 2)

        {

            return "Editado";

        }


        return "Ejemplo";

    }


    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

    {

        throw new NotImplementedException();

    }

}

当数据在OneWay或TwoWay绑定中从源移动到目标时,将调用 Convert 方法。value 参数是来自数据绑定源的对象或值。该方法必须返回数据绑定目标类型的值。


在 xaml 中


<ContentPage.Resources>

    <ResourceDictionary>

        <local:ValueToTextConverter x:Key="ValueToText" />

    </ResourceDictionary>

</ContentPage.Resources>



<StackLayout>

    <ListView x:Name="listaEjemplo" HasUnevenRows="True">

        <ListView.ItemTemplate>

            <DataTemplate>

                <ViewCell>

                    <StackLayout Orientation="Horizontal">

                        <StackLayout Orientation="Vertical">

                            <Label Text="{Binding nombre}" Font="18"></Label>

                            <Slider x:Name="slider" Minimum="0" Maximum="20" />

                            <Label Text="{Binding Source={x:Reference slider},

                                Path=Value,

                                Converter={StaticResource ValueToText}}" TextColor="Gray"></Label>

                        </StackLayout>

                    </StackLayout>

                </ViewCell>

            </DataTemplate>

        </ListView.ItemTemplate>

    </ListView>

</StackLayout>

https://i.stack.imgur.com/Tu5Jd.gif

查看完整回答
反对 回复 2022-12-04
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

至少还有两种方法可以做到:

  • Slider Value将与绑定TwoWay Mode。然后在值的设置器中更改绑定到标签的值(在该部分类似于您在上面的代码中所做的)

  • 绑定Label ValueSlider Value并声明Converter将转换Slider Value为所需Label Value.


查看完整回答
反对 回复 2022-12-04
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信