2

我是 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# 模块主例程以便直接将其用作入口点并避免它成为函数?也就是说,我希望 F# 模块能够通过 Elmish 直接控制窗口。类似于以下内容,但调用了自包含的从属窗口:

/// 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 完成吗?

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

4

1 回答 1

3

我是 Elmish.WPF 的维护者之一。直到最近,所有示例都使用他们的 F# 项目作为入口点。如果您克隆存储库并检查此提交,那么您可以检查这些示例并了解如何实现您的目标。

展望未来,我创建此问题是为了考虑包含至少一个以 F# 项目作为其入口点的示例。

将来,请随时通过在我们的 GitHub中打开问题来询问您的任何 Elmish.WPF 问题。

于 2020-08-13T18:31:48.480 回答