首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FSharp.ViewModule启用对话框OK按钮

使用FSharp.ViewModule启用对话框OK按钮
EN

Stack Overflow用户
提问于 2016-12-02 08:30:48
回答 1查看 135关注 0票数 3

我有一个简单的对话框,其中有两个字段,用于输入一个人的姓名和地址,我只希望在他们都有值时启用OK按钮。以下是我的观点的相关部分:

代码语言:javascript
复制
<TextBox Text="{Binding Name}" ... />
<TextBox Text="{Binding Address}" ... />
<Button Content="OK" IsEnabled="{Binding OK, Mode=OneWay}" ... />

这就是我的观点模型:

代码语言:javascript
复制
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

但是“确定”按钮总是启用的。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 10:49:42

问题是TextBox.Text = LostFocus的默认绑定模式。该属性只是没有更新。

所以:

代码语言:javascript
复制
    <TextBox Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}"/>
    <TextBox Text="{Binding Address,UpdateSourceTrigger=PropertyChanged}" />

但是在FSharp.ViewModule中有一些东西可以让你的生活更轻松。在您的例子中,它是属性IsValid

代码语言:javascript
复制
let name = self.Factory.Backing( <@ self.Name @>, "", notNullOrWhitespace)
let address = self.Factory.Backing( <@ self.Address @>, "", notNullOrWhitespace)

member x.Name 
    with get() = name.Value 
    and set value = name.Value <- value
member x.Address 
    with get() = address.Value 
    and set value = address.Value <- value

在XAML中:

代码语言:javascript
复制
<Button Content="OK" IsEnabled="{Binding IsValid}"  />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40927769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档