F#中的依赖属性

时间:2015-02-11 04:22:00

标签: .net wpf xaml mvvm f#

我有一个用F#编写的MVVM应用程序,我遇到的一个主要问题是关闭模态对话框。我决定在视图中订阅viewmodel的RequestedClose事件,但DialogResult的问题仍然存在。所以,我决定将DialogResult绑定到viewmodel的属性,但很快我意识到DialogResult不是DependencyProperty。最后我尝试实施this accepted answer。但我无法让它工作......这是我的代码:

type DialogCloser() =

static let DialogResultProperty =
    DependencyProperty.RegisterAttached("DialogResult", typeof<bool>, typeof<DialogCloser>)

member this.GetDialogResult (a:DependencyObject) = a.GetValue(DialogResultProperty) :?> bool

member this.SetDialogResult (a:DependencyObject) (value:string) = a.SetValue(DialogResultProperty, value)

member this.DialogResultChanged (a:DependencyObject) (e:DependencyPropertyChangedEventArgs) =
    let window = a :?> Window
    match window with
    | null -> failwith "Not a Window"
    | _ -> window.DialogResult <- System.Nullable(e.NewValue :?> bool)

此外,我尝试了类似this的内容,但它也不适用于我。我遇到过两种类型的异常:1)在DialogCloser中找不到DialogResult 2)而且,如果我用get和set添加DialogResult属性,则DialogResult不能应用于不是DialogCloser的东西。

P.S:我知道必须有另一种方法来解决这个问题,而不是制作一个附属物,但为了进一步发展,我需要了解如何在F#中正确地做到这一点。

0 个答案:

没有答案