XAMARIN - podwójna zmiana BindableProperty

0

Cześć, spotkałem się wczoraj z takim dość sporym problemem.

Mam zwykły ContentPage, na którym umieszczam ContentView w taki sposób:

<StackLayout>
    <views:SheetHeader Sheet="{Binding ActiveSheet}" />
</StackLayout>

ViewModel mojego Page'a oczywiście posiada właściwość Sheet. Teraz w SheetHeader zrobiłem coś takiego:

public Sheet Sheet
{
	get { return (Sheet)GetValue(SheetProperty); }
	set { SetValue(SheetProperty, value); }
}

public static readonly BindableProperty SheetProperty =
	BindableProperty.Create(nameof(Sheet), typeof(Sheet), typeof(SheetHeader),
		propertyChanged: OnSheetChanged);

private static void OnSheetChanged(BindableObject bindable, object oldValue, object newValue)
{
	SheetHeader obj = bindable as SheetHeader;
	Debug.Assert(obj != null);
	if (obj == null)
		return;

	obj.BindingContext = newValue;
}

I co się okazuje? OnSheetChanged wywyoływany jest dwa razy. Raz z poprawnymi danymi, a za drugim razem newValue ma wartość null. Czytałem, że niektórzy też mają taki problem, ale nie widziałem nigdzie rozwiązania. Czy ktoś się z tym spotkał i to ogarnął?

0

Po zagłębieniu się w temat, okazało się, że problemem jest zmiana BindingContextu:

obj.BindingContext = newValue;

W moim przypadku zatem lepiej w XAMLu od razu wpisać BindingContext niż posługiwać się BindableProperty:

<StackLayout>
    <views:SheetHeader BindingContext="{Binding ActiveSheet}" />
</StackLayout>

1 użytkowników online, w tym zalogowanych: 0, gości: 1