Bindungen typischerweise aus der BindingContext
Eigenschaft aufgelöst werden (in anderen Implementierungen ist diese Eigenschaft DataContext
genannt). Dies ist standardmäßig null
(zumindest in anderen XAML-Implementierungen). Daher kann Ihre Ansicht die angegebenen Eigenschaften nicht finden.
In Ihrem Fall müssen Sie die BindingContext
Eigenschaft auf this
gesetzt:
public CardsListXaml()
{
InitializeComponent();
BindingContext = this;
IsLoading = true;
}
Dies wird jedoch allein nicht ausreichen. Ihre aktuelle Lösung implementiert keinen Mechanismus zum Benachrichtigen der Ansicht von Eigenschaftsänderungen, so dass Ihre Ansicht INotifyPropertyChanged
implementieren müsste. Stattdessen empfehle ich Ihnen das Model-View-ViewModel Muster implementieren, die nicht nur schön paßt mit Datenbindung, aber in einer mehr wartbar und überprüfbare Codebasis führen werden:
public class CardsListViewModel : INotifyPropertyChanged
{
private bool isLoading;
public bool IsLoading
{
get
{
return this.isLoading;
}
set
{
this.isLoading = value;
RaisePropertyChanged("IsLoading");
}
}
public CardsListViewModel()
{
IsLoading = true;
}
//the view will register to this event when the DataContext is set
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
Und dann in Ihrem Code-Behind-Konstruktor:
public CardsListView()
{
InitializeComponent();
BindingContext = new CardsListViewModel();
}
Nur um zu klären, DataContext
kaskadiert den visuellen Baum, damit das ActivityIndicator
Steuerelement in der Lage sein wird, in den Bindungen angegebenen Eigenschaften zu lesen.
Edit: Xamarin.Forms (und Silverlight/WPF etc ... sorry, es ist schon eine Weile!) Auch eine SetBinding Methode liefert (siehe Datenbindung Abschnitt).
'Xamarin.Forms'' BindableObject's haben keine 'DataContext' Eigenschaften, aber einen' BindingContext' –
Danke für die Info! –