2017-12-27 2671 views
3

其中一个较小的项目需要功能更改...所以我决定更新Gjallarhorn.Bindable.Wpf库的版本。可通过命令调用的函数获取调用次数

实际上,我只是在需要的地方添加了一个附加参数。

但是现在应用程序无法正常工作,因为可以通过命令调用的函数获得两次调用。

最小例子如下:

type Message = |Number of int 

let rand = Random() 
let mbindings _ source _ = 
    let getNumber() = 
     let number = rand.Next() 
     printfn "RAND = %A" number //print a number twice 
     number |> Some 
    [ 
     Bind.Explicit.createCommand "NewNumber" source 
     |> Observable.map (fun _ -> getNumber()) 
     |> Observable.toMessage Number 
    ] 

let mcomponent : IComponent<int, obj, Message> = 
    Component.fromExplicit mbindings 

let app nav = 
    let model = 42 
    let update message _ = 
     match message with 
     |Number number -> number 
    Framework.application model update mcomponent nav 

...

let nav = Navigation.singleView Application MainWin 
let app = app nav.Navigate 
Framework.RunApplication (nav, app) 

它是一个错误在图书馆或我错过了什么?

+1

这可能是一个错误。任何机会,你可以建立一个github回购和链接到一个问题? https://github.com/ReedCopsey/Gjallarhorn.Bindable/issues –

+0

此外 - 每次点击按钮时是否打印2x? –

回答

3

这是a bug。已在Gjallarhorn.Bindable Beta 6中更正。

问题在于框架在绑定中订阅了两次observable。这通常很好,但在你的情况下,observable有一个副作用,它会多次运行。我重新修改了在框架中如何处理这些内容以防止多次订阅,因此如果升级到最新版本,它不应再触发两次。