Jest kilka przycisków na oknie i staram się znaleźć dobre podejście do obsługi poleceń.Prawidłowy sposób obsługi wielu poleceń (z przycisków) z Gjallarhorn
Na przykład:
muszę wykonać kilka czynności:
type Action =
|Show
|Open
|Input
|Change
|Statistic
tłumaczenia to do XAML będą:
<Button Command="{Binding ShowCommand}" />
<Button Command="{Binding OpenCommand}" />
<Button Command="{Binding InputCommand}" />
<Button Command="{Binding ChangeCommand}" />
<Button Command="{Binding StatisticCommand}" />
nieco gry z biblioteki znalazłem dwa sposoby zrób to bez denerwującego gadania
1. Użyj Observable.merge
Binding.createMessage "StatisticCommand" Statistic source
|> Observable.merge (Binding.createMessage "InputCommand" Input source)
//|> Observable.merge ... and so on
|> Observable.subscribe (performAction model.Value)
|> source.AddDisposable
2. Tworzenie uogólniać wiadomość
type GeneralMessage =
|Perform of Action
|Update of Message
i wzbudzi wiadomość działania na wysokim poziomie
let mainComponent source (model : ISignal<Info>) =
let info = Binding.componentToView source "Info" infoComponent model
//...
let stat = Binding.createMessage "StatCommand" (Perform Statistic) source
let input = Binding.createMessage "InputCommand" (Perform Input) source
//let ...
[info; stat; input; ...]
let appComponent =
let model = initInfo
let update message model =
match message with
|Update message ->
match message with
|...
|Perform action ->
performAction model action
model
Framework.basicApplication model update mainComponent
(Dobrze, lubię pierwszą opcję, ponieważ te działania nie zmieniają modelu)
Czy to jest poprawny sposób (pierwszy, oczywisty) do zrobienia tych rzeczy lub biblioteka zawiera bardziej pasującą funkcję?
P.S. Szukałem Observable.concat [info; stat; input; ...]
, ale nie miałem szczęścia.