2016-07-01 3 views
2

ich Xamarin Forms bin neu und versucht, eine Nullable-Eigenschaft in XAML zu binden:Xamarin Forms Nullable Immobilien - Objektverweis nicht auf eine Instanz eines Objekts festgelegt

public DateTime? LocalExpiryDate //property on Person class 
    { 
     get { return GetValue<DateTime>(); } 
     set { SetValue(value); } 
    } 

<Label Text="{Binding LocalExpiryDate}"/> 

Und wie in der Code-behind-Bindung:

InitializeComponent(); 
MainStackLayout.BindingContext = member.Person; 

Auch wenn die Eigenschaft nicht null ist, wenn ich versuche und die App auf dem Android-Emulator ich einen Fehler laufen „Exception durch das Ziel für einen Aufruf ausgelöst wurde“, und das Bohren nach unten in die Fehler, den ich Erhalte eine Nachricht "Objektverweis nicht auf eine Instanz eines Objekts gesetzt"

Wenn ich das entferne? um die Eigenschaft nicht nullbar zu machen, dann funktioniert die App gut, solange es eine Eigenschaft gibt

Ist es nicht möglich, an eine Nullable-Eigenschaft zu binden, oder gibt es einen Weg darum?

Dank

Mark

+0

Ist 'LocalExpiryDate' eine' BindableProperty' Ihrer Kontrolle? –

+0

Ich bin nicht ganz verständnisvoll - ich bin an die Bezeichnung mit

+0

Ich frage mich, wo Sie 'LocalExpiryDate' deklariert haben –

Antwort

2

Wie ich Ihre Frage verstehen. Ich habe Page:

public partial class Page1 : ContentPage 
{ 
    private Person _person; 
    public Person Person 
    { 
     get { return _person; } 
     set 
     { 
      _person = value; 
      OnPropertyChanged(); 
     } 
    } 

    public Page1() 
    { 
     BindingContext = this; 
     InitializeComponent(); 
    } 

    protected override void OnAppearing() 
    { 
     Person = new Person() { Date = DateTime.Now }; 

     base.OnAppearing(); 
    } 
} 

Ich habe Person:

public class Person : BindableObject 
{ 
    private DateTime? _date; 
    public DateTime? Date 
    { 
     get { return _date; } 
     set 
     { 
      _date = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

Und ich habe XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:CommonSample;assembly=CommonSample" 
     x:Class="CommonSample.Page1"> 
    <StackLayout> 
    <Label Text="{Binding Person.Date}"/> 
    </StackLayout> 
</ContentPage> 
+0

Das ist brilliant, BindableObject hat funktioniert. Person wurde mit Breeze.Sharp.BaseEntity für die Verwendung mit Breeze Sharp markiert, aber durch den Wechsel zu BindableObject wurde sie behoben – Mark