我有两个视图(主视图和过滤器)。对于我的筛选器视图,用户可以从中选择筛选数组中硬编码的数据。在主视图中,将在LazyVGrid视图上显示数据的for will循环中调用该数组。但是,由于某些原因,当我筛选数据时,视图没有更新。
过滤器视图
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")
}
}主要观点
import SwiftUI结构MarketPlace:视图{
@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)
}
}发布于 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()。
https://stackoverflow.com/questions/70628372
复制相似问题