如何使用Elmish.WPF从F#启动多个窗口?

问题描述

我是Elmish.WPF和F#的新手。在研究有关NewWindow / NewWindow.Views的教程时,作者从C#中分配了以下代码:

using System;
using Elmish.WPF.Samples.NewWindow;
using static Elmish.WPF.Samples.NewWindow.Program;

namespace NewWindow.Views {
  public static class Program {
    [STAThread]
    public static void Main() =>
      main(new MainWindow(),() => new Window1(),() => new Window2());
  }
}

即在F#NewWindow.Views项目中调用main方法:

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

如何更改F#模块主例程,以便直接将其用作EntryPoint并避免将其用作函数?也就是说,我希望F#模块可以通过Elmish直接控制Windows。大致如下,但是调用了从属窗口的自包含内容:

/// This is the application's entry point. It hands things off to Elmish.WPF
[<EntryPoint; STAThread>]
let main _ =
  Program.mkSimpleWpf init update bindings
  |> Program.runWindow (MainWindow())

简而言之,我希望C#视图不了解F#项目。

可以用Elmish.wpf完成吗?

任何帮助(尤其是示例代码:))都是最有帮助的。

解决方法

我是Elmish.WPF的维护者之一。直到最近,所有样本都使用其F#项目作为切入点。如果您克隆存储库并检出this commit,则可以检查这些样本并查看如何实现目标。

展望未来,我创建了this issue,以考虑包括至少一个以F#项目作为其入口点的示例。

以后,请在our GitHub中打开问题,随时问您任何Elmish.WPF问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...