diff --git a/src/Elmish.WPF.Tests/ViewModelTests.fs b/src/Elmish.WPF.Tests/ViewModelTests.fs index ebfdc581..eae42943 100644 --- a/src/Elmish.WPF.Tests/ViewModelTests.fs +++ b/src/Elmish.WPF.Tests/ViewModelTests.fs @@ -115,7 +115,7 @@ module Helpers = ({ Get = get Map = map Equals = equals } - |> OneWayLazyData.box + |> BindingData.OneWayLazy.box |> OneWayLazyData |> createBinding) name @@ -132,7 +132,7 @@ module Helpers = Equals = equals GetId = getId ItemEquals = itemEquals } - |> OneWaySeqLazyData.box + |> BindingData.OneWaySeqLazy.box |> OneWaySeqLazyData |> createBinding) name @@ -143,7 +143,7 @@ module Helpers = (set: 'a -> 'model -> 'msg) = ({ Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding) name @@ -155,7 +155,7 @@ module Helpers = (validate: 'model -> string voption) = ({ Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList)) name @@ -193,7 +193,7 @@ module Helpers = GetBindings = fun () -> bindings ToMsg = fun _ -> toMsg Sticky = sticky } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding) name @@ -208,7 +208,7 @@ module Helpers = GetId = getId GetBindings = fun () -> bindings ToMsg = fun _ -> toMsg } - |> SubModelSeqData.box + |> BindingData.SubModelSeq.box |> SubModelSeqData |> createBinding) name @@ -221,7 +221,7 @@ module Helpers = ({ Get = get Set = set SubModelSeqBindingName = subModelSeqBindingName } - |> SubModelSelectedItemData.box + |> BindingData.SubModelSelectedItem.box |> SubModelSelectedItemData |> createBinding) name diff --git a/src/Elmish.WPF/Binding.fs b/src/Elmish.WPF/Binding.fs index 524cdcf2..b1c73945 100644 --- a/src/Elmish.WPF/Binding.fs +++ b/src/Elmish.WPF/Binding.fs @@ -498,67 +498,22 @@ module internal BindingData = let mapMsg f = mapMsgWithModel (fun _ -> f) -module Binding = - - let internal mapData f binding = - { Name = binding.Name - Data = binding.Data |> f } - - /// Map the model type parameter of a binding via a contravariant mapping. - let mapModel (f: 'a -> 'b) (binding: Binding<'b, 'msg>) = binding |> mapData (BindingData.mapModel f) + module Binding = - /// Map the message type parameter of a binding with access to the model via a covariant mapping. - let mapMsgWithModel (f: 'model -> 'a -> 'b) (binding: Binding<'model, 'a>) = binding |> mapData (BindingData.mapMsgWithModel f) + let mapData f binding = + { Name = binding.Name + Data = binding.Data |> f } - /// Map the message type parameter of a binding via a covariant mapping. - let mapMsg (f: 'a -> 'b) (binding: Binding<'model, 'a>) = binding |> mapData (BindingData.mapMsg f) - - let internal subModelSelectedItemLast a b = - BindingData.subModelSelectedItemLast a.Data b.Data - - /// Restrict the binding to models that satisfy the predicate after some model satisfies the predicate. - let sticky (predicate: 'model -> bool) (binding: Binding<'model, 'msg>) = - let mutable stickyModel = None - let f newModel = - match predicate newModel, stickyModel with - | false, Some sm -> - sm - | false, None -> - newModel - | true, _ -> - stickyModel <- Some newModel - newModel - binding |> mapModel f + let mapModel f = f |> mapModel |> mapData + let mapMsgWithModel f = f |> mapMsgWithModel |> mapData + let mapMsg f = f |> mapMsg |> mapData - /// - /// Adds validation to the given binding using INotifyDataErrorInfo. - /// - /// Returns the errors associated with the given model. - /// The binding to which validation is added. - let withValidation (validate: 'model -> string list) (binding: Binding<'model, 'msg>) : Binding<'model, 'msg> = - let data = - { BindingData = binding.Data - Validate = validate } - |> ValidationData - { Name = binding.Name - Data = data } + module Bindings = - -module Bindings = - - /// Map the model type parameter of a list of bindings via a contravariant mapping. - let mapModel (f: 'a -> 'b) (bindings: Binding<'b, 'msg> list) = bindings |> List.map (Binding.mapModel f) - - /// Map the message type parameter of a list of bindings with access to the model via a covariant mapping. - let mapMsgWithModel (f: 'model -> 'a -> 'b) (bindings: Binding<'model, 'a> list) = bindings |> List.map (Binding.mapMsgWithModel f) + let mapModel f = f |> Binding.mapModel |> List.map + let mapMsgWithModel f = f |> Binding.mapMsgWithModel |> List.map + let mapMsg f = f |> Binding.mapMsg |> List.map - /// Map the message type parameter of a list of bindings via a covariant mapping. - let mapMsg (f: 'a -> 'b) (bindings: Binding<'model, 'a> list) = bindings |> List.map (Binding.mapMsg f) - - - -[] -module internal BindingData2 = module Option = @@ -571,7 +526,7 @@ module internal BindingData2 = let unbox obj = obj |> ValueOption.ofObj |> ValueOption.map unbox - module OneWayData = + module OneWay = let mapMinorTypes (outMapA: 'a -> 'a0) @@ -594,7 +549,7 @@ module internal BindingData2 = (mGet "get") - module OneWayLazyData = + module OneWayLazy = let mapMinorTypes (outMapA: 'a -> 'a0) @@ -629,7 +584,7 @@ module internal BindingData2 = (mEquals "equals") - module OneWaySeqLazyData = + module OneWaySeqLazy = let mapMinorTypes (outMapA: 'a -> 'a0) @@ -674,7 +629,7 @@ module internal BindingData2 = (mItemEquals "itemEquals") - module TwoWayData = + module TwoWay = let mapMinorTypes (outMapA: 'a -> 'a0) @@ -703,7 +658,7 @@ module internal BindingData2 = (mSet "set") - module CmdData = + module Cmd = let mapFunctions mExec @@ -720,7 +675,7 @@ module internal BindingData2 = (mCanExec "canExec") - module CmdParamData = + module CmdParam = let mapFunctions mExec @@ -737,7 +692,7 @@ module internal BindingData2 = (mCanExec "canExec") - module SubModelSelectedItemData = + module SubModelSelectedItem = let mapMinorTypes (outMapId: 'id -> 'id0) @@ -765,7 +720,7 @@ module internal BindingData2 = (mSet "set") - module SubModelData = + module SubModel = let mapMinorTypes (outMapBindingModel: 'bindingModel -> 'bindingModel0) @@ -800,7 +755,7 @@ module internal BindingData2 = (mToMsg "toMsg") - module SubModelWinData = + module SubModelWin = let mapMinorTypes (outMapBindingModel: 'bindingModel -> 'bindingModel0) @@ -843,7 +798,7 @@ module internal BindingData2 = id // sic: could measure OnCloseRequested - module SubModelSeqData = + module SubModelSeq = let mapMinorTypes (outMapBindingModel: 'bindingModel -> 'bindingModel0) @@ -883,7 +838,7 @@ module internal BindingData2 = (mGetBindings "bindings") // sic: "getBindings" would follow the pattern (mToMsg "toMsg") - module ValidationData = + module Validation = let mapFunctions mValidate @@ -896,6 +851,60 @@ module internal BindingData2 = (mValidate "validate") +module Binding = + + /// Map the model type parameter of a binding via a contravariant mapping. + let mapModel (f: 'a -> 'b) (binding: Binding<'b, 'msg>) = BindingData.Binding.mapModel f binding + + /// Map the message type parameter of a binding with access to the model via a covariant mapping. + let mapMsgWithModel (f: 'model -> 'a -> 'b) (binding: Binding<'model, 'a>) = BindingData.Binding.mapMsgWithModel f binding + + /// Map the message type parameter of a binding via a covariant mapping. + let mapMsg (f: 'a -> 'b) (binding: Binding<'model, 'a>) = BindingData.Binding.mapMsg f binding + + let internal subModelSelectedItemLast a b = + BindingData.subModelSelectedItemLast a.Data b.Data + + /// Restrict the binding to models that satisfy the predicate after some model satisfies the predicate. + let sticky (predicate: 'model -> bool) (binding: Binding<'model, 'msg>) = + let mutable stickyModel = None + let f newModel = + match predicate newModel, stickyModel with + | false, Some sm -> + sm + | false, None -> + newModel + | true, _ -> + stickyModel <- Some newModel + newModel + binding |> mapModel f + + /// + /// Adds validation to the given binding using INotifyDataErrorInfo. + /// + /// Returns the errors associated with the given model. + /// The binding to which validation is added. + let withValidation (validate: 'model -> string list) (binding: Binding<'model, 'msg>) : Binding<'model, 'msg> = + let data = + { BindingData = binding.Data + Validate = validate } + |> ValidationData + { Name = binding.Name + Data = data } + + +module Bindings = + + /// Map the model type parameter of a list of bindings via a contravariant mapping. + let mapModel (f: 'a -> 'b) (bindings: Binding<'b, 'msg> list) = BindingData.Bindings.mapModel f bindings + + /// Map the message type parameter of a list of bindings with access to the model via a covariant mapping. + let mapMsgWithModel (f: 'model -> 'a -> 'b) (bindings: Binding<'model, 'a> list) = BindingData.Bindings.mapMsgWithModel f bindings + + /// Map the message type parameter of a list of bindings via a covariant mapping. + let mapMsg (f: 'a -> 'b) (bindings: Binding<'model, 'a> list) = BindingData.Bindings.mapMsg f bindings + + [] type Binding private () = @@ -903,7 +912,7 @@ type Binding private () = ///Creates a one-way binding with the model as the value. static member internal id () : string -> Binding<'model, 'msg> = { Get = id } - |> OneWayData.box + |> BindingData.OneWay.box |> OneWayData |> createBinding @@ -914,7 +923,7 @@ type Binding private () = (get: 'model -> 'a) : string -> Binding<'model, 'msg> = { Get = get } - |> OneWayData.box + |> BindingData.OneWay.box |> OneWayData |> createBinding @@ -930,7 +939,7 @@ type Binding private () = (get: 'model -> 'a option) : string -> Binding<'model, 'msg> = { Get = get } - |> OneWayData.boxOpt + |> BindingData.OneWay.boxOpt |> OneWayData |> createBinding @@ -946,7 +955,7 @@ type Binding private () = (get: 'model -> 'a voption) : string -> Binding<'model, 'msg> = { Get = get } - |> OneWayData.boxVOpt + |> BindingData.OneWay.boxVOpt |> OneWayData |> createBinding @@ -973,7 +982,7 @@ type Binding private () = { Get = get Map = map Equals = equals } - |> OneWayLazyData.box + |> BindingData.OneWayLazy.box |> OneWayLazyData |> createBinding @@ -1004,7 +1013,7 @@ type Binding private () = { Get = get Map = map Equals = equals } - |> OneWayLazyData.boxOpt + |> BindingData.OneWayLazy.boxOpt |> OneWayLazyData |> createBinding @@ -1035,7 +1044,7 @@ type Binding private () = { Get = get Map = map Equals = equals } - |> OneWayLazyData.boxVOpt + |> BindingData.OneWayLazy.boxVOpt |> OneWayLazyData |> createBinding @@ -1074,7 +1083,7 @@ type Binding private () = Equals = equals GetId = getId ItemEquals = itemEquals } - |> OneWaySeqLazyData.box + |> BindingData.OneWaySeqLazy.box |> OneWaySeqLazyData |> createBinding @@ -1115,7 +1124,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding @@ -1133,7 +1142,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding @@ -1151,7 +1160,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding @@ -1172,7 +1181,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -1194,7 +1203,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -1216,7 +1225,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -1238,7 +1247,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) @@ -1262,7 +1271,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -1286,7 +1295,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -1310,7 +1319,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -1334,7 +1343,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) @@ -1358,7 +1367,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -1382,7 +1391,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -1406,7 +1415,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -1430,7 +1439,7 @@ type Binding private () = : string -> Binding<'model, 'msg> = { Get = get Set = set } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) @@ -1664,7 +1673,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1689,7 +1698,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1709,7 +1718,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> id Sticky = false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1754,7 +1763,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1800,7 +1809,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1840,7 +1849,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1882,7 +1891,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> toMsg Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1918,7 +1927,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> id Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -1955,7 +1964,7 @@ type Binding private () = GetBindings = bindings ToMsg = fun _ -> id Sticky = defaultArg sticky false } - |> SubModelData.box + |> BindingData.SubModel.box |> SubModelData |> createBinding @@ -2018,7 +2027,7 @@ type Binding private () = GetWindow = fun m d -> upcast getWindow m d IsModal = defaultArg isModal false OnCloseRequested = fun _ -> defaultArg (onCloseRequested |> Option.map ValueSome) ValueNone } - |> SubModelWinData.box + |> BindingData.SubModelWin.box |> SubModelWinData |> createBinding @@ -2136,7 +2145,7 @@ type Binding private () = GetWindow = fun m d -> upcast getWindow m d IsModal = defaultArg isModal false OnCloseRequested = fun _ -> defaultArg (onCloseRequested |> Option.map ValueSome) ValueNone } - |> SubModelWinData.box + |> BindingData.SubModelWin.box |> SubModelWinData |> createBinding @@ -2240,7 +2249,7 @@ type Binding private () = GetWindow = fun m d -> upcast getWindow m d IsModal = defaultArg isModal false OnCloseRequested = fun _ -> defaultArg (onCloseRequested |> Option.map ValueSome) ValueNone } - |> SubModelWinData.box + |> BindingData.SubModelWin.box |> SubModelWinData |> createBinding @@ -2323,7 +2332,7 @@ type Binding private () = GetId = getId GetBindings = bindings ToMsg = fun _ -> toMsg } - |> SubModelSeqData.box + |> BindingData.SubModelSeq.box |> SubModelSeqData |> createBinding @@ -2355,7 +2364,7 @@ type Binding private () = GetId = snd >> getId GetBindings = bindings ToMsg = fun _ -> toMsg } - |> SubModelSeqData.box + |> BindingData.SubModelSeq.box |> SubModelSeqData |> createBinding @@ -2381,7 +2390,7 @@ type Binding private () = GetId = snd >> getId GetBindings = bindings ToMsg = fun _ (_, msg) -> msg } - |> SubModelSeqData.box + |> BindingData.SubModelSeq.box |> SubModelSeqData |> createBinding @@ -2420,7 +2429,7 @@ type Binding private () = { Get = get Set = set SubModelSeqBindingName = subModelSeqBindingName } - |> SubModelSelectedItemData.box + |> BindingData.SubModelSelectedItem.box |> SubModelSelectedItemData |> createBinding @@ -2459,7 +2468,7 @@ type Binding private () = { Get = get >> ValueOption.ofOption Set = ValueOption.toOption >> set SubModelSeqBindingName = subModelSeqBindingName } - |> SubModelSelectedItemData.box + |> BindingData.SubModelSelectedItem.box |> SubModelSelectedItemData |> createBinding @@ -2534,7 +2543,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -2556,7 +2565,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -2578,7 +2587,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -2600,7 +2609,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.box + |> BindingData.TwoWay.box |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) @@ -2624,7 +2633,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -2648,7 +2657,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -2672,7 +2681,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -2696,7 +2705,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxVOpt + |> BindingData.TwoWay.boxVOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) @@ -2720,7 +2729,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation validate @@ -2744,7 +2753,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.toList) @@ -2768,7 +2777,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> Option.toList) @@ -2792,7 +2801,7 @@ module Extensions = : string -> Binding<'model, 'msg> = { Get = get Set = fun p _ -> set p } - |> TwoWayData.boxOpt + |> BindingData.TwoWay.boxOpt |> TwoWayData |> createBinding >> Binding.withValidation (validate >> ValueOption.ofError >> ValueOption.toList) diff --git a/src/Elmish.WPF/ViewModel.fs b/src/Elmish.WPF/ViewModel.fs index 2c7071a3..5532e8f1 100644 --- a/src/Elmish.WPF/ViewModel.fs +++ b/src/Elmish.WPF/ViewModel.fs @@ -173,37 +173,37 @@ and [] internal ViewModel<'model, 'msg> let measure2 x = x |> measure2 name let rec initializeBindingRec = function | OneWayData d -> - { OneWayData = d |> OneWayData.measureFunctions measure } + { OneWayData = d |> BindingData.OneWay.measureFunctions measure } |> OneWay |> Some | OneWayLazyData d -> - { OneWayLazyData = d |> OneWayLazyData.measureFunctions measure measure measure2 } + { OneWayLazyData = d |> BindingData.OneWayLazy.measureFunctions measure measure measure2 } |> OneWayLazy |> withCaching |> Some | OneWaySeqLazyData d -> - { OneWaySeqData = d |> OneWaySeqLazyData.measureFunctions measure measure measure2 measure measure2 + { OneWaySeqData = d |> BindingData.OneWaySeqLazy.measureFunctions measure measure measure2 measure measure2 Values = ObservableCollection(initialModel |> d.Get |> d.Map) } |> OneWaySeq |> Some | TwoWayData d -> - { TwoWayData = d |> TwoWayData.measureFunctions measure measure } + { TwoWayData = d |> BindingData.TwoWay.measureFunctions measure measure } |> TwoWay |> Some | CmdData d -> - let d = d |> CmdData.measureFunctions measure measure + let d = d |> BindingData.Cmd.measureFunctions measure measure let execute _ = d.Exec currentModel |> ValueOption.iter dispatch let canExecute _ = d.CanExec currentModel Some <| Cmd { Cmd = Command(execute, canExecute, false) CanExec = d.CanExec } | CmdParamData d -> - let d = d |> CmdParamData.measureFunctions measure2 measure2 + let d = d |> BindingData.CmdParam.measureFunctions measure2 measure2 let execute param = d.Exec param currentModel |> ValueOption.iter dispatch let canExecute param = d.CanExec param currentModel Some <| CmdParam (Command(execute, canExecute, d.AutoRequery)) | SubModelData d -> - let d = d |> SubModelData.measureFunctions measure measure measure2 + let d = d |> BindingData.SubModel.measureFunctions measure measure measure2 let toMsg = fun msg -> d.ToMsg currentModel msg d.GetModel initialModel |> ValueOption.map (fun m -> ViewModel(m, toMsg >> dispatch, d.GetBindings (), performanceLogThresholdMs, getNameChainFor name, log, logPerformance)) @@ -211,7 +211,7 @@ and [] internal ViewModel<'model, 'msg> |> SubModel |> Some | SubModelWinData d -> - let d = d |> SubModelWinData.measureFunctions measure measure measure2 + let d = d |> BindingData.SubModelWin.measureFunctions measure measure measure2 let toMsg = fun msg -> d.ToMsg currentModel msg let onCloseRequested = fun m -> m |> d.OnCloseRequested |> ValueOption.iter dispatch match d.GetState initialModel with @@ -245,7 +245,7 @@ and [] internal ViewModel<'model, 'msg> |> SubModelWin |> Some | SubModelSeqData d -> - let d = d |> SubModelSeqData.measureFunctions measure measure measure measure2 + let d = d |> BindingData.SubModelSeq.measureFunctions measure measure measure measure2 let toMsg = fun msg -> d.ToMsg currentModel msg let vms = d.GetModels initialModel @@ -259,7 +259,7 @@ and [] internal ViewModel<'model, 'msg> |> SubModelSeq |> Some | SubModelSelectedItemData d -> - let d = d |> SubModelSelectedItemData.measureFunctions measure measure2 + let d = d |> BindingData.SubModelSelectedItem.measureFunctions measure measure2 match getInitializedBindingByName d.SubModelSeqBindingName with | Some (SubModelSeq b) -> { SubModelSelectedItemData = d @@ -274,7 +274,7 @@ and [] internal ViewModel<'model, 'msg> log.LogError("SubModelSelectedItem binding referenced binding {SubModelSeqBindingName} but no binding was found with that name", d.SubModelSeqBindingName) None | ValidationData d -> - let d = d |> ValidationData.measureFunctions measure + let d = d |> BindingData.Validation.measureFunctions measure errorsByName.[name] <- d.Validate currentModel d.BindingData |> initializeBindingRec