如何使用 Elmish.wpf 和 F# 管理多个 windows、用户控件和自定义控件?

How to manage multiple windows, usercontrols, and customcontrols with Elmish.wpf and F#?

我是 F# 的新手。我最近被介绍到 Elmish.wpf 和 MVU 设计。我正在使用的应用程序是在 C# WPF 中使用许多 WPF 用户控件、自定义控件和 windows。 Elmish.wpf 似乎将视图模型的概念扁平化为单个数据上下文。 (??)。 Elmish.wpf 可以与多个 windows、用户控件和自定义控件一起使用吗? (此处的“多个”表示大约 20 个 windows、用户控件和自定义控件。)

如果是这样,有这方面的例子吗?

查看Elmish.wpf webside,似乎所有windows都需要在初始化时创建--

let main mainWindow (createWindow1: Func<#Window>) (createWindow2: Func<#Window>) =
  let createWindow1 () = createWindow1.Invoke()
  let createWindow2 () =
    let window = createWindow2.Invoke()
    window.Owner <- mainWindow
    window
  let bindings = App.mainBindings createWindow1 createWindow2
  Program.mkSimpleWpf App.init App.update bindings
  |> Program.withConsoleTrace
  |> Program.runWindowWithConfig
    { ElmConfig.Default with LogConsole = true; Measure = true }
    mainWindow

有更好的方法吗?我是不是找错树了?

提前致谢。

是的,Elmish.WPF绝对支持多个windows和user-defined控件。

许多 samples in the Elmish.WPF repo 以这种或那种方式证明了这一点。例如,NewWindow 示例演示了如何打开新的 windows,SubModel(以及许多其他示例)演示了如何使用自定义 UserControlSubModelSeq 示例是目前最复杂的示例,展示了递归 UserControl 的任意深度树。

所有这些也在 the official Elmish.WPF tutorial 中描述。

(供将来参考,this is the current commit at the time of writing;样本可能已更改。)