Ответ 1
Привязки обычно разрешаются из свойства 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
сможет читать свойства, указанные в привязках.
Изменить: Xamarin.Forms(и Silverlight/WPF и т.д.) извините, это было время!) также предоставляет метод SetBinding ( см. раздел Связывание данных).