我有两个带有嵌套视图模型的嵌套视图,需要确保对它们进行验证.
从本质上讲,ViewA有一个表单、一个提交按钮和一个子视图(ViewB)--ViewB的ViewModel包含在ViewBThis architecture cannot change due to boring business reasons中,ViewB有一些表单域.在启用提交按钮之前,我需要确保所有字段在视图A和视图B中都有效.
我似乎想不出如何做到这一点,因为ViewB中的任何更改都不会触发Viewa刷新
以下是一些简化的代码,作为粗略的示例
class ViewModelB: ObservableObject {
@Published var text = ""
@Published var textTwo = ""
func isValid() -> Bool {
!text.isEmpty && !textTwo.isEmpty
}
}
class ViewModelA: ObservableObject {
@Published var text = ""
@ObservedObject var addressViewModel: ViewModelB = ViewModelB()
func isValid() -> Bool {
print("is Valid called")
return !text.isEmpty && addressViewModel.isValid()
}
}
struct AddressView: View {
@ObservedObject var viewModel: ViewModelB
init(addressModel:ViewModelB) {
self.viewModel = addressModel
}
var body: some View {
TextField("View B Text", text: $viewModel.text)
TextField("View B TextTwo", text: $viewModel.textTwo)
}
}
struct ContentView: View {
@StateObject var viewModel: ViewModelA = ViewModelA()
var body: some View {
VStack {
TextField("View A Text", text: $viewModel.text)
AddressView(addressModel: viewModel.addressViewModel)
Button("Apply Button") {
print("Button tapped!")
}.disabled(!viewModel.isValid() || !viewModel.addressViewModel.isValid())
}
}
}