问题描述
我是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问题。