首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >observableObject没有更新视图

observableObject没有更新视图
EN

Stack Overflow用户
提问于 2022-01-07 23:43:44
回答 1查看 84关注 0票数 0

我有两个视图(主视图和过滤器)。对于我的筛选器视图,用户可以从中选择筛选数组中硬编码的数据。在主视图中,将在LazyVGrid视图上显示数据的for will循环中调用该数组。但是,由于某些原因,当我筛选数据时,视图没有更新。

过滤器视图

代码语言:javascript
复制
import SwiftUI

struct Filter: View {
@Binding  var sortIndex: Int
@ObservedObject var model: MarketDataViewModel

var sort = ["Lowest to Highest", "Highest to Lowest"]

var body: some View {
    Form {
        Section(header: Text("Filtering")){
            
            
            Picker(selection: $sortIndex, label: Text("Sort by")) {
                ForEach(0..<sort.count) {
                    Text(self.sort[$0])
                }
            }.onChange(of: sortIndex, perform: { value in
                model.data.sort(by: {$0.price < $1.price})
                print(model.data)
                print("__________________________________")
            })
        
    } .navigationBarTitle("Filters")
  }
}

主要观点

代码语言:javascript
复制
import SwiftUI

结构MarketPlace:视图{

代码语言:javascript
复制
@State var sortIndex = 0
@StateObject var item = MarketDataViewModel()

var body: some View {
    NavigationView {
        VStack {
            HStack{
                NavigationLink(destination: Filter(sortIndex: $sortIndex, model: MarketDataViewModel())) {
                    Image("Filter")
                        .resizable()
                }
                Spacer()
                    .frame(width: 15)
            }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-08 00:03:59

在这里,每次单击NavigationLink(destination: Filter(sortIndex: $sortIndex, model: MarketDataViewModel()))都会创建一个新的MarketDataViewModel。你应该这么做:NavigationLink(destination: Filter(sortIndex: $sortIndex, model: item))。这样,您就可以使用唯一的真理来源,您的@StateObject var item = MarketDataViewModel()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70628372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档