C# xamarin.forms从xaml绑定到属性
我对xaml中的绑定完全是个新手,有时候我真的不懂 我的xaml中有以下内容:C# xamarin.forms从xaml绑定到属性,c#,xaml,xamarin.forms,C#,Xaml,Xamarin.forms,我对xaml中的绑定完全是个新手,有时候我真的不懂 我的xaml中有以下内容: 绑定“IsLoading”。我在哪里声明/设置此属性 我的.cs如下所示: 。。。。 公共布尔孤岛; 公共卡slistxaml() { 初始化组件(); IsLoading=true; .... 绑定通常从BindingContext属性解析(在其他实现中,此属性称为DataContext)。默认情况下(至少在其他XAML实现中),此属性为null,因此您的视图无法找到指定的属性 在您的情况下,必须将Bindin
绑定“IsLoading”。我在哪里声明/设置此属性
我的.cs如下所示:
。。。。
公共布尔孤岛;
公共卡slistxaml()
{
初始化组件();
IsLoading=true;
....
绑定通常从BindingContext
属性解析(在其他实现中,此属性称为DataContext
)。默认情况下(至少在其他XAML实现中),此属性为null
,因此您的视图无法找到指定的属性
在您的情况下,必须将BindingContext
属性设置为this
:
public CardsListXaml()
{
InitializeComponent();
BindingContext = this;
IsLoading = true;
}
但是,仅此一点是不够的。您当前的解决方案没有实现通知视图任何属性更改的机制,因此您的视图必须实现INotifyPropertyChanged
。相反,我建议您实现该模式,它不仅非常适合数据绑定,而且将导致更易于维护的和可测试代码库:
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等…抱歉,已经有一段时间了!)还提供了一个方法(请参见数据绑定部分)。
Xamarin.Forms
BindableObject
没有DataContext
属性,但有BindingContext