问题标签 [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.

0 投票
1 回答
215 浏览

wpf - 如何将命令/属性绑定到 FSharp.ViewModule 中的 PropertyChanged

FSarp.ViewModule我有一个简单的视图中,单击按钮会根据右侧的文本框在左侧的文本框中生成一个随机数。我将如何绑定右侧文本框中的更改(例如手动输入数字),以便通过调用 clickcommand 或 click() 方法而不单击按钮来更新左侧文本框?我尝试了不同的组合,self.DependencyTrackerself.RaisePropertyChanged无法正确使用语法。

这是视图:

看法

XAML:

和视图模型:

0 投票
1 回答
263 浏览

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.FSharpFunc2<Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FakeUnitValue>) at Microsoft.FSharp.Control.Trampoline.ExecuteAction(Microsoft.FSharp.Core.FSharpFunc2) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object) 的 .$Control+-ctor@507.Invoke(System.Object)

编辑 2 - 发现问题

我不得不使用以下更简单的重载(根据此源代码OnPropertyChanged,它们都在 C# 中实现和工作)

0 投票
1 回答
137 浏览

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?

0 投票
1 回答
218 浏览

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 ViewModelsXAML. 该项目将在它只有 MainWindow.xaml.fs 时构建,但自从我添加了 Dialog.fs

编辑 2:这是我的 .fsproj 文件

编辑 3:App.fs 给出错误“未定义字段、构造函数或成员 'Root'。

并且 packages.config 给出警告“未声明 'packages' 元素”。

0 投票
1 回答
59 浏览

f# - 如何在执行异步任务时保持按钮启用

在我的xaml我有一个 Button 和一个 TextBlock

在我的 ViewModel 我有以下代码

当我单击该按钮时,它会被禁用并保持不变,直到完成asyncTask. 我认为设置canExecuteastrue会改变行为,但事实并非如此!

如何控制按钮的行为?

0 投票
1 回答
130 浏览

wpf - 使用 FSharp.ViewModule 启用对话框 OK 按钮

我有一个简单的对话框,其中有两个字段用于输入一个人的姓名和地址,我只希望在它们都有值时启用 OK 按钮。以下是我观点的相关部分:

这是我的视图模型:

但“确定”按钮始终处于启用状态。我究竟做错了什么?

0 投票
0 回答
135 浏览

wpf - SpeechSynthesizer 的内存使用情况

我编写了一个应用程序,使用SpeechSynthesizer它可以读出TextBox. 在我的 ViewModel 中,我创建了该类的单个实例并重写Finalize了处理方法。当我在其中粘贴一些文本TextBox并继续单击按钮时,我看到内存使用量不断增加。在我的应用程序中,我有四个按钮Play, Pause, ResumeStop/Clear. 在我的 ViewModel 我有以下代码

并在 Xaml

我的代码有什么问题吗?

0 投票
1 回答
292 浏览

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函数中添加注释以显示单击“确定”按钮时我想要做什么:

0 投票
1 回答
230 浏览

wpf - F# WPF:处理 ListBox 中的单击事件

我正在尝试使用 F# 和 WPF 创建一个简单的任务调度程序。它基本上只是一个任务列表,其中每个任务都有一个“删除”按钮。处理列表外的按钮点击不是问题——这可以使用常规命令来处理。然而,处理列表项的按钮单击并不简单。我尝试使用此处描述的 RelayCommand与路由到父级的绑定,但发送者对象始终为空(我希望它是集合中的任务对象)。还尝试按照此处的建议附加属性,但无法使其正常工作。

如何分配通过单击删除按钮获取任务对象的事件处理程序?

这是 App.fs:

MainWindow.xaml:

App.xaml 是微不足道的,所以我不在这里展示它。

0 投票
1 回答
52 浏览

wpf - f# xaml "this.factory" 不包含 CommandSync

我对 fsxaml 和 F# 有一个奇怪的错误。我有一个视图模型,我想从工厂属性调用 CommandSync,但它不可用。实际上它是空的,没有可用的功能。我在这里想念什么?

代码 :

PS 我已经有 ViewModule 参考