第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何定義兩個在 Xamarin.Forms 中相互更新的可綁定屬性?

如何定義兩個在 Xamarin.Forms 中相互更新的可綁定屬性?

C#
智慧大石 2022-12-24 14:46:14
我想聲明一個BindableProperty作為BindablePropertyXamarin.Forms 中另一個的便利屬性。設(shè)置一個將更新另一個。我不會給出完整的上下文和實際類型,但一個非常簡單易懂的場景如下:我有一個定義 Number 和 Numberp1 屬性的視圖。Number 是可綁定的,而 Numberp1 屬性在這里充當(dāng)便利屬性。//Definitionpublic class MyView : ContentView{    public static BindableProperty NumberProperty = BindableProperty.Create(nameof(Number), typeof(int), typeof(MyView));    public int Number { get => (int)GetValue(NumberProperty); set => SetValue(NumberProperty, value); }    public int Numberp1 { get => Number + 1; set => Number = value - 1; }}//Usage<local:MyView Number="{Binding Number}"/>事情進(jìn)展順利,直到客戶發(fā)現(xiàn) Numberp1 不可綁定并且希望我使其可綁定。<local:MyView Numberp1="{Binding Numberp1}"/>//error : No property, bindable property, or event found for 'Numberp1', or mismatching type between value and property.我如何使這兩個屬性都可綁定但又使它們相互更新?我嘗試使用轉(zhuǎn)換器進(jìn)行調(diào)查,但它們似乎只能在綁定中使用,而不是在BindableProperty定義中使用。
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊

事情進(jìn)展順利,直到客戶發(fā)現(xiàn) Numberp1 不可綁定并且希望我使其可綁定。


請為 Numberp1 創(chuàng)建另一個 BindableProperty,BindableProperty“Numberp1Property”的占位符應(yīng)始終與不帶“Property”的名稱相匹配。


   public static BindableProperty NumberProperty = BindableProperty.Create(nameof(Number), typeof(int), typeof(MyView11), null, propertyChanged: OnNumberChanged);


    private static void OnNumberChanged(BindableObject bindable, object oldValue, object newValue)

    {

        var num = (MyView11)bindable;

        num.Number = (int)newValue;

    }


    public static BindableProperty NumberpProperty = BindableProperty.Create(nameof(Numberp), typeof(int), typeof(MyView11), null, propertyChanged: OnNumber1Changed);


    private static void OnNumber1Changed(BindableObject bindable, object oldValue, object newValue)

    {

        var num = (MyView11)bindable;

        num.Numberp = (int)newValue;

    }


    public int Number

    {

        get => (int)GetValue(NumberProperty);

        set => SetValue(NumberProperty, value);

    }


    public int Numberp

    {

        get => Number + 1;

        set => Number = value - 1;

    }

為 BindableProperty 添加 propertyChanged 事件。


查看完整回答
反對 回復(fù) 2022-12-24
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊

它們都必須定義為 BindableProperty。不幸的是,您不能依賴被調(diào)用的 setter 方法,因為運行時不一定通過 setter,它可以直接調(diào)用 SetValue,這會更新 BindableProperty 的值的最終來源。


但是,您可以相信 BindableProperty 確實會自動為您的任一鏈接屬性獲取 PropertyChanged 通知。


因此,首先定義兩個屬性:


    public static BindableProperty Number1Property = BindableProperty.Create(nameof(Number1), typeof(int), typeof(MyView));

    public static BindableProperty Number2Property = BindableProperty.Create(nameof(Number2), typeof(int), typeof(MyView));

    public int Number1 { get => (int)GetValue(Number1Property); set => SetValue(Number1Property, value); }

    public int Number2 { get => (int)GetValue(Number2Property); set => SetValue(Number2Property, value); }

然后,在構(gòu)造函數(shù)中,監(jiān)聽變化:


public MyView ()

{

    InitializeComponent();


    PropertyChanged += MyView_PropertyChanged;

}

最后,確保對任何一個的更改傳播到另一個,其中 Number2 = Number1 + 1:


    private void MyView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)

    {

        if (e.PropertyName == Number1Property.PropertyName)

        {

            if (Number1 + 1 != Number2)

                Number2 = Number1 + 1;

        }

        if (e.PropertyName == Number2Property.PropertyName)

        {

            if (Number1 + 1 != Number2)

                Number1 = Number2 - 1;

        }

    }

編輯正如@Knoop 所指出的,OP 希望這些值是相關(guān)的,而不是完全相同。


查看完整回答
反對 回復(fù) 2022-12-24
  • 2 回答
  • 0 關(guān)注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號