在将按钮的命令绑定到操作后,我调用了一个公开进度事件的对象。
event System.EventHandler<ProgressChangedEventArgs> ProgressChanged
我想以最好的方式在我的 XAML 中显示它。
一种方法是在我的 VM 中公开两个可绑定字段
member x.Iteration with get() = _iteration
and set(v:int) = _iteration <- v
x.NotifyPropertyChanged <@this.Iteration@>
member x.IterationVisible with get() = _iterationVisible
and set(v:bool) = _iterationVisible <- v
x.NotifyPropertyChanged <@this.IterationVisible@>
然后在我被要求执行操作的地方,我只会更新属性
member x.CompleteInference(algorithm:IGeneratedAlgorithm) =
x.IterationVisible <- true
algorithm.ProgressChanged.Add(fun args -> x.Iteration <- args.Iteration)
algorithm.run()
x.IterationVisible <- false
这导致了两个问题:
F#中是否有直接的方法来公开
progressChanged
事件,而不通过这个中间Iteration
属性,可以由 WPF 处理?它是我们能得到的最具声明性的吗/我们总是必须在某处存储一些状态吗?另外,是否有一种自然的方法可以完全在XAML中进行这种“状态机”绑定?