我有一个Xamarin Forms应用程序,在该应用程序中,我将Master-Detail模板与MVVM结合使用。它非常适合我的需求。关键是,我偶尔会在显示的视图的顶部栏中以类似通知的方式显示某种信息。有时这会是错误消息,例如“服务器无法访问”或“不允许操作”。
问题是,似乎唯一可以将其放入该栏中的方法是通过ContentPage.ToolbarItems
,它没有DataBinding或通过ViewModel进行访问的任何方式。
我想出的一个可能的解决方案是将视图作为参数传递给ViewModel,然后从那里执行类似view.ToolbarItems.Add(new ToolbarItem("abc", null, () => { }));
的操作。但这在相当基本的水平上打破了MVVM,因为ViewModel引用了View。可以使用界面遮罩视图,但是我根本不喜欢这种解决方案。
那么,我可以使用DataBinding在Xamarin Master-Detail应用程序的顶部栏中动态添加和删除按钮吗?
答案 0 :(得分:1)
正如您已经提到的,在视图模型中引用视图绝不是一个好主意,因为它破坏了MVVM模式。在像您这样的情况下,当绑定不可用时,明智/可接受的方法是从视图中订阅视图模型,以便在视图模型发生更改时对其进行更新。
在您的视图中添加类似内容:
ViewModel.PropertyChanged += OnViewModelPropertyChanged;
...
private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case nameof(ViewModel.YourProperty):
// Apply changes to the view here, for example:
ToolbarItems.Add(new ToolbarItem(ViewModel.YourProperty, null, () => { }));
break;
}
}
我希望这会有所帮助!