[英]Update OnPropertyChanged on a Parent View from a child view
在 Xamarin for mac 中,我决定使用 MVVM 模式在我的主视图中创建多个视图。
问题是我的 MainPage 中有一个 ListView,它从 model 中提取项目列表,并且该列表填充在具有自己的 ViewModel 的子视图中。
当我从子视图添加新服务时,我希望触发父视图 model 上的 OnPropertyChanged 事件。
它通过导航到父视图并将 animation 设置为 false 来工作,但这看起来不太好看。 当我在一个 ViewModel 中拥有所有代码时,它仍然有效。
我是如何尝试实现这一目标的,以及我得到的错误:
0 - 从父 model 访问子 model 中的命令,并传递 propertychanged 事件处理程序。
我做不到。 我通过制作如下所示的可绑定命令来尝试此操作,但这对我来说是不可行的,因为我认为该命令不可能知道何时更改属性,这就是这个问题的重点。 如果可行,我不知道如何。
//public static readonly BindableProperty SaveServiceClickedCommandProperty =
// BindableProperty.Create(
// "SaveServiceClicked",
// typeof(Command),
// typeof(NewServiceViewModel),
// null);
1 - 在子视图 model 上传递父视图 model,并在单击的事件处理程序处放置一个 OnPropertyChanged(nameof(parentModel.List))。
public class ChildViewModel : INotifyPropertyChanged
{
public ICommand AddEntryClickedCommand { get; private set; }
private MainModel mainModel;
// property changed handler
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public NewServiceViewModel()
{
Navigation = MainPage;
//async void execute() => await OpenPage();
//OpenPageCommand = new Command(execute, () => !IsBusy);
//async Task OpenPage()
//{
// await Navigation.PushAsync(new MainPage());
//}
// Here I tried to access the data from within the main model.
mainModel = new MainModel(Navigation);
InitMainModel();
void InitMainModel()
{
MainPage mainView = new MainPage();
mainView.BindingContext = mainModel;
}
async void c1() => await AddEntryClicked();
AddEntryClickedCommand = new Command(c1);
}
public async Task<bool> AddEntryClicked()
{
OnPropertyChanged(nameof(mainModel.List))
}
上述尝试产生了一些错误,因为 object 已被填充。 导致我认为我完全没有正确的方法。
我的解决方案是在父视图中重新引入子视图,并根据是否单击按钮更改 IsVisible,就像我已经对其他较小的组件所做的那样。 我曾考虑从子视图中拉出列表,但这引发了同样的非空集合问题。
当然,代码已被修改为仅显示要点。
提前致谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.