2 回答
TA贡献1875条经验 获得超3个赞
事情进展顺利,直到客户发现 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 事件。
TA贡献1856条经验 获得超5个赞
它们都必须定义为 BindableProperty。不幸的是,您不能依赖被调用的 setter 方法,因为运行时不一定通过 setter,它可以直接调用 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); }
然后,在构造函数中,监听变化:
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 希望这些值是相关的,而不是完全相同。
- 2 回答
- 0 关注
- 163 浏览
添加回答
举报
