我很难将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会自动更新?
感谢。
答案 0 :(得分:1)
内容不是可绑定的属性。
您可以将方法连接到ItemCount设置器,以便在更新ItemCount时刷新UI。
答案 1 :(得分:0)
当您自己创建视图时,除非您通知发生更改,否则Xamarin引擎无法知道属性是否已更改。
你有2个解决方案:
在您的视图上实现接口INotifyPropertyChanged,以便Xamarin可以绑定到您的事件“PropertyChanged”
(我最喜欢的)使用MVVM Helpers 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}" />