问题标签 [fsharp.viewmodule]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mvvm - F# async/await 在视图模型中
我在 F# 中的视图模型
我正在尝试使用 F# 而不是 C# 来实现我的 ViewModel。我正在关注这篇文章(顺便说一句,有没有更新或更好的建议?)。
所以假设我有我的视图模型基础实现(MVVM.ViewModel
,它在 C# 中,但我可以从 F# 引用它)和一个简单的Status
属性。
一切都按预期工作,到目前为止一切都很好(但是如果您发现任何概念错误或者您是否找到上述代码的更惯用的版本,请告诉我)
介绍异步/等待模式
这就是我出错的地方:我知道如何在 C# 中做到这一点,但我在 F# 中并不擅长。
我已经尝试过以下方法。
问题是 - 当我运行完整的 WPF 应用程序时 - 我看不到预期的延迟:最终状态直接进入输出。
如果我将上面的内容更改Async.StartImmediate(task)
为Async.RunSynchronously(task)
,我当然会看到正在进行的延迟,但是应用程序被冻结了,所以这不是我想要的。
如果我将其重新排列为
我收到一个错误
成员或对象构造函数“OnPropertyChanged”不可访问。私有成员只能从声明类型中访问。受保护的成员只能从扩展类型访问,不能从内部 lambda 表达式访问。
编辑(续)
最后,我也试过这个
但应用程序因 ArgumentException 而崩溃
堆栈跟踪
应用程序:MyFuncWPF.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.ArgumentException 堆栈:在 MVVM.ViewModel.ViewModelBase.OnPropertyChanged[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089] 在 FuncViewModel.MyFuncViewModel.set_Status(System.String) 在 . $MyVMLib+RunSetStatus@20.Invoke(Microsoft.FSharp.Core.Unit) 在 Microsoft.FSharp.Control.CancellationTokenOps+StartWithContinuations@1274[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ]].Invoke(System.__Canon) at .$Control.loop@430-52(Microsoft.FSharp.Control.Trampoline, Microsoft.FSharp.Core.FSharpFunc
2<Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FakeUnitValue>) at Microsoft.FSharp.Control.Trampoline.ExecuteAction(Microsoft.FSharp.Core.FSharpFunc
2) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object) 的 .$Control+-ctor@507.Invoke(System.Object)
编辑 2 - 发现问题
我不得不使用以下更简单的重载(根据此源代码OnPropertyChanged
,它们都在 C# 中实现和工作)
wpf - How to use FsXaml's CommandDependecy/(ies)
Here is what I have done using FsXaml
and in xaml
How can I use command dependecy of ViewModule
to set x.ListOfData
instead of calling returnPrice(value)
in setter of x.SelectedId
?
wpf - 无法加载 FsXaml.Wpf.TypeProvider
我正在尝试将 WPF 与 F# 一起使用。我已经使用 F# Empty Windows App 模板创建了一个项目(事实上,我已经使用不同的设置创建了几个)。然后我添加了 FSharp.ViewModule 和 FsXaml.Wpf 引用。当项目只有 MainWindow.xaml 和 MainWindow.xaml.fs 时,它工作正常。但是,一旦我添加了另一个 .xaml 视图文件和 .fs ViewModel 文件,我就会在 .fs 文件顶部的“命名空间 ViewModels”声明中收到以下错误:
“FsXaml 加载错误”一文中描述了一个类似的问题(我无法添加评论,因为我没有足够的声誉)。但我已经尝试了那里给出的两个答案——更改 CPU 和 F# 运行时——但都没有。
我在 Windows 7 SP1 64 位虚拟机中使用 Visual Studio 2015 社区版。我尝试使用以下框架和 DLL 版本:
- NET 框架 4.5 和 4.6
- F# 3.0 和 4.0
- FSharp.ViewModule 0.9.9 和 0.9.9.3
- FsXaml.Wpf 2.0.0 和 2.1.0
编辑 1:在回复下面 Reed 的评论时,这是我的两个显示错误的代码文件。首先,MainWindow.xaml.fs:
这是Dialog.fs:
在这两个文件中,我namespace ViewModels
在XAML
. 该项目将在它只有 MainWindow.xaml.fs 时构建,但自从我添加了 Dialog.fs
编辑 2:这是我的 .fsproj 文件
编辑 3:App.fs 给出错误“未定义字段、构造函数或成员 'Root'。
并且 packages.config 给出警告“未声明 'packages' 元素”。
f# - 如何在执行异步任务时保持按钮启用
在我的xaml
我有一个 Button 和一个 TextBlock
在我的 ViewModel 我有以下代码
当我单击该按钮时,它会被禁用并保持不变,直到完成asyncTask
. 我认为设置canExecute
astrue
会改变行为,但事实并非如此!
如何控制按钮的行为?
wpf - 使用 FSharp.ViewModule 启用对话框 OK 按钮
我有一个简单的对话框,其中有两个字段用于输入一个人的姓名和地址,我只希望在它们都有值时启用 OK 按钮。以下是我观点的相关部分:
这是我的视图模型:
但“确定”按钮始终处于启用状态。我究竟做错了什么?
wpf - SpeechSynthesizer 的内存使用情况
我编写了一个应用程序,使用SpeechSynthesizer
它可以读出TextBox
. 在我的 ViewModel 中,我创建了该类的单个实例并重写Finalize
了处理方法。当我在其中粘贴一些文本TextBox
并继续单击按钮时,我看到内存使用量不断增加。在我的应用程序中,我有四个按钮Play, Pause, Resume
和Stop/Clear
. 在我的 ViewModel 我有以下代码
并在 Xaml
我的代码有什么问题吗?
wpf - 使用 FSharp.ViewModule 关闭对话框
在我之前的问题“使用 FSharp.ViewModule 启用对话框 OK 按钮”中,我达到了仅当对话框字段的验证器为 true 并且 ViewModule 的 IsValid 属性为 true 时才启用对话框的 OK 按钮的地步。但在那之后我又遇到了几个问题:
1)即使我IsDefault="true"
在 XAML 中设置,单击 OK 按钮也没有关闭对话框。
2) 当单击 OK 按钮时,有时我想做比 ViewModule 验证器提供的更多的检查(例如,检查电子邮件地址)。然后,如果此自定义验证失败,我想阻止对话框关闭。
但是我不知道在使用 F# 和 MVVM 时如何做。首先,我尝试将 XAML 放入 C# 项目中,并将视图模型代码放入 F# 库中。然后我在后面的代码中使用了 OK 按钮的 Click 处理程序来关闭窗口。这固定了 1),但不是 2)。
所以这是我的 XAML:
还有我的视图模型-在validate
函数中添加注释以显示单击“确定”按钮时我想要做什么:
wpf - f# xaml "this.factory" 不包含 CommandSync
我对 fsxaml 和 F# 有一个奇怪的错误。我有一个视图模型,我想从工厂属性调用 CommandSync,但它不可用。实际上它是空的,没有可用的功能。我在这里想念什么?
代码 :
PS 我已经有 ViewModule 参考