xamarin 通过MVVVMCross中的MVXValueConverter传递ICommand操作,并在iOS-Android中进行绑定

pn9klfpd  于 2023-11-15  发布在  iOS
关注(0)|答案(1)|浏览(126)

我正在Xamarin MVVMCross中创建一个跨平台应用程序,其中我使用属性文本来显示文本某些部分的可单击链接。
我已经用MvxValueConverter创建了自定义类,并在iOS类中应用了Binding。
下面是我的代码。

public class FreeShippingConverter : MvxValueConverter<string, NSAttributedString>
    {
        protected override NSAttributedString Convert(string value, Type targetType, object parameter, CultureInfo culture)
        {
            var result = new NSMutableAttributedString(value);
            var startIndex = value.IndexOf(Strings.Test, StringComparison.InvariantCultureIgnoreCase);
            if (startIndex < 0)
            {
                return result;
            }

            var range = new NSRange(startIndex, Strings.Test.Length);
            result.AddAttribute(UIStringAttributeKey.Font, TextStyle.B2Bold.Font(), range);
            result.AddAttribute(UIStringAttributeKey.ForegroundColor, Colors.Bluescale4.ToNativeColor(), range);
            return result;
        }
    }

字符串
下面是TableViewCell的绑定代码。

this.CreateBinding(FreeShippingText).For(v => v.AttributedText).To((FulfilmentOptionsCellViewModel vm) => vm.FreeShippingText).WithConversion<FreeShippingConverter>().Apply();


的数据
现在,我想创建一个操作时,用户点击“津贴成员"。
如何在iOS和Android中绑定?
请帮帮我

vu8f3i0k

vu8f3i0k1#

这能满足你的需求吗?
创建VM类:

namespace Forms1.ViewModels
{
    public class VM
    {
        public ICommand SomeActionsCommand { get; set; }
        void SomeActions()
        {
            Console.WriteLine("some actions");
        }
        public VM()
        {
            SomeActionsCommand = new Command(SomeActions);
        }
    }
}

字符串
在您的MainPage.xaml中:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:vm="clr-namespace:Forms1.ViewModels"
             x:Class="Forms1.MainPage">
    <ContentPage.BindingContext>
        <vm:VM/>
    </ContentPage.BindingContext>

   <StackLayout Padding="10,10">
        <Label LineBreakMode="WordWrap" FontSize="Large" VerticalOptions="CenterAndExpand">
            <Label.FormattedText>
                <FormattedString>
                    <Span Text="FREE Shipping For " TextColor="#465978" />
                    <Span Text="Perks Members" TextColor="#2d3f62" FontAttributes="Bold"  FontSize="Large">
                        <Span.GestureRecognizers>
                            <TapGestureRecognizer Command="{Binding SomeActionsCommand}" />
                        </Span.GestureRecognizers>
                    </Span>
                </FormattedString>
            </Label.FormattedText>
        </Label>
    </StackLayout>

</ContentPage>


这是effect

相关问题