KinkumaFramework FSharp v0.2

Rating: No reviews yet
Downloads: 46
Change Set: 8927
Released: Jun 28, 2011
Updated: Jul 3, 2011 by okazuki
Dev status: Stable Help Icon

Recommended Download

Application NugetPackage
application, 22K, uploaded Jun 28, 2011 - 28 downloads

Other Available Downloads

Example Sample Program
example, 2005K, uploaded Jul 3, 2011 - 18 downloads

Release Notes

KinkumaFramework F# v0.2

F#でViewModelを記載する際の補助ライブラリです。

提供機能概要

ViewModelの基本クラス

以下のような形でF#でViewModelクラスを記述できます。
    type SampleViewModel() =
        inherit FsViewModelBase()

        // プロパティのフィールド
        let mutable name = Unchecked.defaultof<string>

        // コマンドのフィールド
        let mutable sampleCommand = Unchecked.defaultof<DelegateCommand>

        // プロパティの定義
        member x.Name
            with get() = name
            // FsViewModelBaseにあるsetメソッドに委譲
            and set v = x.set(&name, v, <@ x.Name @>)

        member x.SampleCommand = x.command(&sampleCommand, x.SampleExecute, x.CanSampleExecute)

        member private x.SampleExecute() =
            // 任意の処理

        member private x.CanSampleExecute() =
            // 任意の処理

基本クラスFsViewModelBaseに定義されているsetメソッドとcommandメソッドを使用することで、ViewModelのコードの記述を簡略化出来ます。setメソッド内ではPropertyChangedのイベントの発行を行っています。commandメソッド内ではCommandManagerとPrismのDelegateCommandの関連付けを行っています。

ViewModelの基本クラスをFsViewModelBaseからFsValidatableViewModelBaseに変更することで、DataAnnotationsの属性をプロパティに指定するだけで、IDataErrorInfoによる入力値の妥当性検証を行います。
    type SampleViewModel() =
        inherit FsValidatableViewModelBase()

        // プロパティのフィールド
        let mutable name = Unchecked.defaultof<string>

        // コマンドのフィールド
        let mutable sampleCommand = Unchecked.defaultof<DelegateCommand>

        // プロパティの定義
        [<Required(ErrorMessage = "名前を入力してください)>]
        member x.Name
            with get() = name
            and set v = x.set(&name, v, <@ x.Name @>)

InteractionRequestの非同期ワークフロー対応

PrismのInteractionRequestのRaiseメソッド+コールバックによる継続処理の記述を非同期ワークフローに対応したRaiseAsyncメソッドを使うことで同期的に処理の記述が出来るようにしています。
    async {
        let message = greet x.Name
        // 非同期ワークフロー対応のRaiseAsyncを使うことで同期的に処理を記述可能
        let! result = x.AlertRequest.RaiseAsync(
                        ShowMessageBoxConfirmation(
                            Title = "確認", 
                            Content = greet x.Name, 
                            Button = Nullable<MessageBoxButton>(MessageBoxButton.OKCancel)))
        x.Selected <- match result.Confirmed with
                        | true -> "OKが押されました"
                        | false -> "Cancelが押されました"
        // StartImmediateと組み合わせることで現在のスレッド上(大体の場合UIスレッド)で動作させることが可能。
    } |> Async.StartImmediate 

KinkumaFrameworkとの統合

View層では、KinkumaFrameworkで提供している様々なBehaviorやTriggerActionを使用することが出来ます。

nuget対応

KinkumaFramework.FSharpというIDで公開しています。

更新履歴

2011/6/26 v0.2

  • FsValidatableViewModelBaseクラス
    • DataAnnotationsによる入力値の妥当性検証機能を追加
  • FsViewModelクラス
    • SetAndNotifyメソッドの名前をsetに変更
    • GetOrCreateCommandメソッドの名前をcommandに変更

2011/6/25 v0.1.1

  • F#用FsViewModelBaseクラス
    • F#向けViewModelの基本クラス
  • InteractionRequest<T>クラスのRaiseAsyncメソッド
    • 非同期ワークフロー内でRaiseメソッドを発行する

今後の予定

  • Silverlight版のリリース

Reviews for this release

No reviews yet for this release.