繁体   English   中英

将父视图 viewModel 的 @Published 属性绑定到子视图 viewModel 的 @Published 属性:SwiftUI

[英]Binding @Published property of parent view's viewModel to @Published property of child view's viewModel: SwiftUI

我有这个设置:父视图:PostsListView 子视图:PostEditView

  • PostsListView 显示帖子的列表简短描述
  • 在点击任何帖子时,我会呈现子视图:PostEditView
  • 目标是在此处调用 API 更改帖子,当用户返回 PostsListView 时,它应该显示更新的描述

我正在使用 MVVM,所以在 PostsListView

@ObservedObject var viewModel : PostsListViewModel    
LazyVGrid(columns: columns) {
                    ForEach(viewModel.posts, id: \.self) { post in
                        NavigationLink(
                            destination: PostEditView(viewModel: PostEditViewModel(post: post))){
                                Text(post: post)
                                    .lineLimit(3)
                        }
                    }
                }

我将视图模型(PostEditViewModel(post:))从父视图传递给 childView。

我不确定如何在两个视图的视图模型中绑定这个“帖子”object。

仅供参考视图模型:

PostsListViewModel:

class PostsListViewModel: ObservableObject{
    @Published var posts: [Post]
    //api operations....
}

PostEditViewModel:

class PostEditViewModel: ObservableObject{
    @Published var post: Post
    //custom Post mutation and api operations....
}

您不需要执行任何特殊的组合操作。 只需确保Post是一个引用类型 ( class ) 并将Post实例从PostListViewModel.postsPostEditViewModel.post ,这样每当您在子 VM 中更改Post object 的任何属性时,相同的更改将反映在父 VM 也是如此,因为Post object 是一个引用类型,并且两个 VM 都引用了相同的 object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM