我有兩個視圖(主視圖和過濾器)。對于我的過濾器視圖,用戶可以從中選擇一些選擇器,這些選擇器將過濾在陣列中硬編碼的資料。在主視圖中,陣列在 for each 回圈中被呼叫,該回圈將在 LazyVGrid 視圖上顯示資料。但是,由于某種原因,當我過濾資料時視圖沒有更新。
過濾器視圖
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
結構市場:查看{
@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)
}
}
uj5u.com熱心網友回復:
在這里,每次單擊它都會NavigationLink(destination: Filter(sortIndex: $sortIndex, model: MarketDataViewModel()))
創建一個新的MarketDataViewModel。你應該有:NavigationLink(destination: Filter(sortIndex: $sortIndex, model: item))。這樣您就可以使用單一的事實來源,即您的@StateObject var item = MarketDataViewModel().
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/407090.html
標籤:
