3
人の名前とアドレスを入力するための2つのフィールドを持つ簡単なダイアログがあり、両方が値を持つ場合にのみ[OK]ボタンを有効にします。ここでは、関連する私の見解の一部である:FSharp.ViewModuleでダイアログボックスのOKボタンを有効にする
<TextBox Text="{Binding Name}" ... />
<TextBox Text="{Binding Address}" ... />
<Button Content="OK" IsEnabled="{Binding OK, Mode=OneWay}" ... />
そして、これは私の見解モデルです:
namespace ViewModels
open FSharp.ViewModule
open FSharp.ViewModule.Validation
open FsXaml
type DialogView = XAML<"Dialog.xaml">
type DialogVM() as self =
inherit ViewModelBase()
let name = self.Factory.Backing(<@ self.Name @>, "", notNullOrWhitespace)
let address = self.Factory.Backing(<@ self.Address @>, "")
let hasValue str = not(System.String.IsNullOrWhiteSpace(str))
member x.Name
with get() = name.Value
and set value = name.Value <- value ; self.RaisePropertyChanged(<@ self.OK @>)
member x.Address
with get() = address.Value
and set value = address.Value <- value ; self.RaisePropertyChanged(<@ self.OK @>)
member x.OK with get() = hasValue x.Name && hasValue x.Address
しかし、[OK]ボタンが常に有効になります。私は間違って何をしていますか?
おかげで、私はコード内のIsValidプロパティが表示されていない、あなたのケースでは、プロパティ
IsValid
のですか? – DenisV@DenisV ViewModelBaseにあります –
@ReedCopsey初心者の間違い - 私はWindow.DataContextを設定するのを忘れていました。ダー!しかし、このバリデーションのアプローチはとても素敵でシンプルに見えます。 – DenisV