Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: elmish/Elmish.WPF
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: f82cd6e5ab593b5f5076fd4c1666bd509954de3f
Choose a base ref
..
head repository: elmish/Elmish.WPF
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 6cf0b5292de2a417bfdcfa03dc4657301c2941de
Choose a head ref
Showing with 16 additions and 15 deletions.
  1. +16 −15 src/Elmish.WPF/Binding.fs
31 changes: 16 additions & 15 deletions src/Elmish.WPF/Binding.fs
Original file line number Diff line number Diff line change
@@ -33,60 +33,60 @@ module WindowState =
| ValueNone -> WindowState.Closed


type OneWayData<'model, 'a> = {
type internal OneWayData<'model, 'a> = {
Get: 'model -> 'a
}

type OneWayLazyData<'model, 'a, 'b> = {
type internal OneWayLazyData<'model, 'a, 'b> = {
Get: 'model -> 'a
Map: 'a -> 'b
Equals: 'a -> 'a -> bool
}

type OneWaySeqLazyData<'model, 'a, 'b, 'id> = {
type internal OneWaySeqLazyData<'model, 'a, 'b, 'id> = {
Get: 'model -> 'a
Map: 'a -> 'b seq
Equals: 'a -> 'a -> bool
GetId: 'b -> 'id
ItemEquals: 'b -> 'b -> bool
}

type TwoWayData<'model, 'msg, 'a> = {
type internal TwoWayData<'model, 'msg, 'a> = {
Get: 'model -> 'a
Set: 'a -> 'model -> 'msg
}

type TwoWayValidateData<'model, 'msg, 'a> = {
type internal TwoWayValidateData<'model, 'msg, 'a> = {
Get: 'model -> 'a
Set: 'a -> 'model -> 'msg
Validate: 'model -> string voption
}

type CmdData<'model, 'msg> = {
type internal CmdData<'model, 'msg> = {
Exec: 'model -> 'msg voption
CanExec: 'model -> bool
}

type CmdParamData<'model, 'msg> = {
type internal CmdParamData<'model, 'msg> = {
Exec: obj -> 'model -> 'msg voption
CanExec: obj -> 'model -> bool
AutoRequery: bool
}

type SubModelSelectedItemData<'model, 'msg, 'id> = {
type internal SubModelSelectedItemData<'model, 'msg, 'id> = {
Get: 'model -> 'id voption
Set: 'id voption -> 'model -> 'msg
SubModelSeqBindingName: string
}

type SubModelData<'model, 'msg, 'bindingModel, 'bindingMsg> = {
type internal SubModelData<'model, 'msg, 'bindingModel, 'bindingMsg> = {
GetModel: 'model -> 'bindingModel voption
GetBindings: unit -> Binding<'bindingModel, 'bindingMsg> list
ToMsg: 'model -> 'bindingMsg -> 'msg
Sticky: bool
}

and SubModelWinData<'model, 'msg, 'bindingModel, 'bindingMsg> = {
and internal SubModelWinData<'model, 'msg, 'bindingModel, 'bindingMsg> = {
GetState: 'model -> WindowState<'bindingModel>
GetBindings: unit -> Binding<'bindingModel, 'bindingMsg> list
ToMsg: 'model -> 'bindingMsg -> 'msg
@@ -95,7 +95,7 @@ and SubModelWinData<'model, 'msg, 'bindingModel, 'bindingMsg> = {
OnCloseRequested: 'model -> 'msg voption
}

and SubModelSeqData<'model, 'msg, 'bindingModel, 'bindingMsg, 'id> = {
and internal SubModelSeqData<'model, 'msg, 'bindingModel, 'bindingMsg, 'id> = {
GetModels: 'model -> 'bindingModel seq
GetId: 'bindingModel -> 'id
GetBindings: unit -> Binding<'bindingModel, 'bindingMsg> list
@@ -104,7 +104,7 @@ and SubModelSeqData<'model, 'msg, 'bindingModel, 'bindingMsg, 'id> = {


/// Represents all necessary data used to create the different binding types.
and BindingData<'model, 'msg> =
and internal BindingData<'model, 'msg> =
| OneWayData of OneWayData<'model, obj>
| OneWayLazyData of OneWayLazyData<'model, obj, obj>
| OneWaySeqLazyData of OneWaySeqLazyData<'model, obj, obj, obj>
@@ -120,11 +120,12 @@ and BindingData<'model, 'msg> =

/// Represents all necessary data used to create a binding.
and Binding<'model, 'msg> =
internal
{ Name: string
Data: BindingData<'model, 'msg> }


module BindingData =
module internal BindingData =

let subModelSelectedItemLast a b =
match a, b with
@@ -248,15 +249,15 @@ module BindingData =

module Binding =

let mapData f binding =
let internal mapData f binding =
{ Name = binding.Name
Data = binding.Data |> f }

let mapModel f = f |> BindingData.mapModel |> mapData
let mapMsgWithModel f = f |> BindingData.mapMsgWithModel |> mapData
let mapMsg f = f |> BindingData.mapMsg |> mapData

let subModelSelectedItemLast a b =
let internal subModelSelectedItemLast a b =
BindingData.subModelSelectedItemLast a.Data b.Data