Associazioni sono in genere risolti dalla proprietà BindingContext
(in altre implementazioni, questa proprietà è chiamata DataContext
). Questo è null
per impostazione predefinita (almeno nelle altre implementazioni di XAML), pertanto la vista non è in grado di trovare le proprietà specificate.
Nel tuo caso, è necessario impostare la proprietà BindingContext
a this
:
public CardsListXaml()
{
InitializeComponent();
BindingContext = this;
IsLoading = true;
}
Tuttavia, questo da solo non sarà sufficiente. La tua soluzione attuale non implementa un meccanismo per notificare la visualizzazione di eventuali modifiche alle proprietà, pertanto la tua visualizzazione dovrà implementare INotifyPropertyChanged
. Invece, vi suggerisco di implementare il modello Model-View-ViewModel, che non solo si adatta perfettamente con l'associazione di dati, ma si tradurrà in una base di codice più gestibile e controllabile:
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));
}
}
}
E poi nel costruttore vostra di code-behind:
public CardsListView()
{
InitializeComponent();
BindingContext = new CardsListViewModel();
}
Giusto per chiarire, DataContext
scende a cascata lungo l'albero visivo, pertanto il controllo ActivityIndicator
sarà in grado di leggere le proprietà specificate nei binding.
Modifica: Xamarin.Forms (e Silverlight/WPF ecc ... mi dispiace, è stato un po '!) Fornisce anche un metodo SetBinding (vedi Associazione dati sezione).
fonte
2014-09-18 13:09:02
'Xamarin.Forms'' BindableObject's non ha proprietà 'DataContext', ma un' BindingContext' –
Grazie per le informazioni! –