我有一个用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#中正确地做到这一点。