我有一个基于ContentView的自定义控件,其中包含一些BindableProperty字段。这些控件在普通的ContentPage页面上效果很好。
我现在正在尝试使用Rg.Plugins.Popup nuget包在弹出窗口中使用它们。控件正常显示,但是它们从不显示任何值-绑定似乎不起作用。在调用弹出式窗口ContentView的构造函数之前,这些字段的确显示为绑定为null,但是当BindingContext更改时,什么也没有发生。
以下是在控件中设置BindableProperty的方式:
public string FieldValue { get; set; }
public static readonly BindableProperty FieldValueProperty = BindableProperty.Create(
propertyName: "FieldValue",
returnType: typeof(string),
declaringType: typeof(MFGField),
defaultValue: "",
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: FieldValuePropertyChanged);
private static void FieldValuePropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
var control = (MFGField)bindable;
if(newValue != null)
control.ValueEntry.Text = newValue.ToString();
}
这是在XAML中进行设置的方式:
<MyNamespace:MFGField x:Name="OrderNumber" FieldValue="{Binding CurrentPick[Order_Number]}" LabelText="Order Number:" ReadOnly="true" Grid.Column="0" Grid.Row="0"/>
弹出式ContentView当前具有一个ViewLifecycleEffect,用作弹出式窗口的“ OnAppearing”,并且当前是我在加载数据后设置BindingContext的位置:
private async void ViewLifecycleEffect_OnLoaded(object sender, EventArgs e)
{
await callingPage.LoadBinRecord(callingPage.SearchTextValue);
((AppData)this.BindingContext).CurrentPick = ((AppData)this.BindingContext).CurrentPicks[((AppData)this.BindingContext).PickIndex];
}
我已经确认应该绑定的对象中的数据存在并且正确,但是当BindingContext更新时,不会调用我字段的PropertyChanged函数。
一段时间后,我将返回Xamarin Forms,我确定自己遗漏了一些明显的内容,但是我仍然遗漏了它。任何帮助表示赞赏。
答案 0 :(得分:0)
抱歉,此问题似乎是由于我不幸选择要绑定的字段而导致的。该对象中有200多个字段,而我碰巧选择了几个相当合理的选择进行测试,其中的值意外为空。
最初,我确实在正确设置BindingContext时遇到问题,并且该字段问题使我无法看到我实际上已解决了该问题。实际上,既然绑定了正确的字段,绑定实际上似乎就可以正常工作了。