我想声明一个Xamarin.Forms中的BindableProperty
另一个便利属性BindableProperty
。设置一个将更新另一个。我不会提供完整的上下文和实际类型,但是一个非常简单易懂的方案如下:
我有一个定义Number和Numberp1属性的视图。Number是可绑定的,而Numberp1属性在这里充当了便捷属性。
//Definition
public 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}"/>
一切顺利,直到客户发现Numberp1不可绑定,并希望我使其可绑定。
<local:MyView Numberp1="{Binding Numberp1}"/>
//error : No property, bindable property, or event found for 'Numberp1', or mismatching type between value and property.
我将如何使这两个属性可绑定但又使它们彼此更新?我尝试使用Converters进行调查,但它们似乎仅在Binding中可用,而不在BindableProperty
定义中可用。
一切顺利,直到客户发现Numberp1不可绑定,并希望我使其可绑定。
请为Numberp1创建另一个BindableProperty,BindableProperty'Numberp1Property'的占位符应始终与不带'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事件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句