如何将ContentView绑定到属性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将ContentView绑定到属性?相关的知识,希望对你有一定的参考价值。
我很难将ContentView绑定到C#Xamarin应用中的属性。
这就是我写作的方式:
protected override View MyView
{
get
{
if (_myView == null)
{
_myView = new ContentView
{
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.StartAndExpand,
Padding = new Thickness(0, 40),
Content = new StackLayout(),
};
if (Vm.ItemCount > 0)
{
(_myView.Content as StackLayout).Children.Add(MyListview);
}
else
{
(_myView.Content as StackLayout).Children.Add(NothingExistsLabel);
}
}
return _myView;
}
}
现在Vm.ItemCount可以随时更改,但UI不会更新。
有没有办法将ContentView数据绑定到Vm.ItemCount,这样当ItemCount发生变化时,UI会自动更新?
谢谢。
答案
内容不是可绑定的属性。
您可以将方法连接到ItemCount设置器,以便在更新ItemCount时刷新UI。
另一答案
当您自己创建视图时,除非您通知发生更改,否则Xamarin引擎无法知道属性是否已更改。
你有2个解决方案:
- 在您的视图上实现接口INotifyPropertyChanged,以便Xamarin可以绑定到您的事件“PropertyChanged”
- (我最喜欢的)使用MVVM助手nuget https://github.com/jamesmontemagno/mvvm-helpers简化实现。例如:
你的模特
public class MyViewModel : BaseViewModel // From MVVM Helpers nuget
{
private IEnumerable<int> count;
public IEnumerable<int> Count
{
get { return count; }
set { SetProperty(ref count, value); }
}
}
你的观点
public class MyView : ContentView
{
private MyViewModel Vm { get; set; }
public MyView()
{
this.Vm = new MyViewModel();
this.BindingContext = this.Vm;
}
public void DoSomething()
{
this.Vm.Count = 42;
}
}
在Xaml中添加绑定
<Label Text = "{Binding Count}" />
以上是关于如何将ContentView绑定到属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 View 类中的代码片段移动到 OnAppearing() 方法?