ボタンのコマンドをアクションにバインドした後、progress イベントを公開するオブジェクトを呼び出します。
event System.EventHandler<ProgressChangedEventArgs> ProgressChanged
それを XAML で最良の方法で表示したいと思います。
1 つの方法は、VM で 2 つのバインド可能なフィールドを公開することです
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
それは2つの質問につながります:
F#
progressChanged
で、この中間Iteration
プロパティを経由せずに、WPF で処理できるイベントを公開する直接的な方法はありますか? それは私たちが得ることができる最も宣言的なものですか/常に何らかの状態をどこかに保存する必要がありますか?さらに、この「ステート マシン」バインディングをXAMLで完全に実行する自然な方法はありますか?