首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WPF的F#事件驱动的MVVM

使用WPF的F#事件驱动的MVVM
EN

Stack Overflow用户
提问于 2015-07-14 13:23:17
回答 1查看 1.1K关注 0票数 3

我已经使用事件驱动的MVVM几个星期了(第一次在F#中使用设计模式),我喜欢将视图和模型以及“功能”控制器分离的想法。但是,当我阅读一本关于WPF的书时,我会觉得如果我能直接讲述一些事件的话,会更容易。另外,在某些情况下,我需要从后面的代码中获得一个控件。

更具体而言:

  • 如何关闭XAML文件中定义为用户控件的窗口
  • 如果我能直接加入事件,似乎对按钮的需求就会减少(触发持有状态的布尔人),从而产生更自动的感觉。

有没有人分享过这种经历,还是我还错过了什么?返回到FsXaml或polyglot MVVM是明智的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 09:36:50

实际上,代码很容易扩展。基于演示,我能够将文本框转换为数字文本框。这样做的代码是非常基本的,但我的意图是定义一个自定义事件访问器。这可以通过以下方式实现:

使用以下内容扩展UserControl.xaml报头:

代码语言:javascript
复制
xmlns:fsxaml="http://github.com/fsprojects/FsXaml"   
fsxaml:ViewController.Custom="{x:Type views:CompositionUserControl}"

并替换UserControl.xaml.fs中的原始代码:

代码语言:javascript
复制
namespace Space.Views

open FsXaml

type UserView = XAML<"View/UserControl.xaml", true>

type CompositionUserControl () =

    member __.ViewModel = Space.ViewModels.UserControlViewModel(Space.Models.Handling.proces)

使用

代码语言:javascript
复制
namespace Space.Views

open FsXaml
open System

type UserView = XAML<"View/UserControl.xaml", true>

type CompositionUserControl () =
    inherit UserControlViewController<UserView>()

    let numeric (txt : string) =
        try txt |> int with
        | :? System.FormatException -> 0
        | _ -> 1

    override this.OnLoaded view = 
        view.Box.PreviewTextInput.Add(fun e -> if numeric e.Text = 0 then e.Handled <- true) 

    member __.ViewModel = Space.ViewModels.UserControlViewModel(Space.Models.Handling.proces)

编辑

回顾这篇文章,以下是我最初问题的进展:

如何关闭XAML文件中定义为用户控件的窗口

使用附加属性DialogCloser

如果我能直接加入事件,似乎对按钮的需求就会减少(触发持有状态的布尔人),从而产生更自动的感觉。

这里的关键是学习:

  1. 如何真正将视图(模型)与模型分离
  2. 如何利用XAML的全部功能
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31407930

复制
相关文章

相似问题

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