Наручники, как правило, решаются с BindingContext
собственности (в других реализациях это свойство называется DataContext
). Это по умолчанию null
(по крайней мере, в других реализациях XAML), поэтому ваше представление не может найти указанные свойства.
В вашем случае, вы должны установить BindingContext
свойство this
:
public CardsListXaml()
{
InitializeComponent();
BindingContext = this;
IsLoading = true;
}
Однако это само по себе не будет достаточно. Ваше текущее решение не реализует механизм уведомления о каких-либо изменениях свойств, поэтому ваше представление должно было бы реализовать INotifyPropertyChanged
. Вместо этого я предлагаю вам реализовать Model-View-ViewModel шаблон, который не только соответствует красиво с привязкой данных, но приведут к более обслуживаемой и проверяемой базе кода:
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));
}
}
}
, а затем в конструкторе вашего фонового кода в:
public CardsListView()
{
InitializeComponent();
BindingContext = new CardsListViewModel();
}
Чтобы уточнить, DataContext
каскадирует вниз по визуальному дереву, поэтому элемент управления ActivityIndicator
сможет читать свойства, указанные в привязках.
Edit: Xamarin.Forms (и Silverlight/WPF и т.д. ... извините, это было какое-то время!) Также обеспечивает SetBinding метод (см Data Binding раздел).
'Xamarin.Forms'' BindableObject 'не имеют свойств DataContext', а' BindingContext' –
Спасибо за информацию! –