Bindings thường được giải quyết từ BindingContext
tài sản (trong việc triển khai khác, khách sạn này được gọi là DataContext
). Đây là null
theo mặc định (ít nhất là trong các triển khai khác của XAML), do đó chế độ xem của bạn không thể tìm thấy các thuộc tính được chỉ định.
Trong trường hợp của bạn, bạn phải thiết lập các BindingContext
tài sản để this
:
public CardsListXaml()
{
InitializeComponent();
BindingContext = this;
IsLoading = true;
}
Tuy nhiên, điều này không thôi sẽ không đủ. Giải pháp hiện tại của bạn không triển khai cơ chế thông báo cho chế độ xem về bất kỳ thay đổi thuộc tính nào, vì vậy, chế độ xem của bạn sẽ phải triển khai INotifyPropertyChanged
. Thay vào đó, tôi đề nghị bạn thực hiện mô hình Model-View-ViewModel, trong đó không chỉ phù hợp đẹp mắt với dữ liệu ràng buộc, nhưng sẽ dẫn đến một cơ sở mã dễ bảo trì hơn và kiểm chứng:
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));
}
}
}
Và sau đó trong constructor code-behind của bạn:
public CardsListView()
{
InitializeComponent();
BindingContext = new CardsListViewModel();
}
Chỉ cần làm rõ, DataContext
thác xuống cây thị giác, do đó điều khiển ActivityIndicator
sẽ có thể đọc được các thuộc tính được chỉ định trong các kết buộc.
Chỉnh sửa: Xamarin.Forms (và Silverlight/WPF vv ... xin lỗi, đã lâu rồi!) Cũng cung cấp phương thức SetBinding (xem phần Dữ liệu ràng buộc).
Nguồn
2014-09-18 13:09:02
'Xamarin.Forms'' BindableObject 'không có thuộc tính' DataContext', nhưng 'BindingContext' –
Cảm ơn bạn đã thông tin! –