在试图从MVVM应用程序的窗口中检索DialogResult时,我偶然发现了this previous question。在实现建议的更改之后,示例如下所示:
type DialogCloser() =
static let DialogResultProperty =
DependencyProperty.RegisterAttached("DialogResult", typeof<bool>, typeof<DialogCloser>, new PropertyMetadata(DialogResultChanged))
static member GetDialogResult (a:DependencyObject) =
a.GetValue(DialogResultProperty) :?> bool
static member 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)现在在声明DialogResultChanged之前使用它,当然这在F#中不计算。
我似乎找不到一个可行的解决办法,任何帮助都将不胜感激。
发布于 2015-10-21 12:59:41
我不是WPF专家,但在this related C# solution中,DialogResultsChanged方法是静态的。如果在F#中也将该方法定义为静态方法,则应该能够在声明它之前引用它(使用全名DialogCloser.DialogResultsChanged),所以如下所示应该可以做到这一点:
type DialogCloser() =
static let DialogResultProperty =
DependencyProperty.RegisterAttached
( "DialogResult", typeof<bool>, typeof<DialogCloser>,
new PropertyMetadata(DialogCloser.DialogResultChanged))
static member GetDialogResult (a:DependencyObject) =
a.GetValue(DialogResultProperty) :?> bool
static member SetDialogResult (a:DependencyObject) (value:string) =
a.SetValue(DialogResultProperty, value)
static member DialogResultChanged
(a:DependencyObject) (e:DependencyPropertyChangedEventArgs) =
let window = a :?> Window
match window with
| null -> failwith "Not a Window"
| _ -> window.DialogResult <- System.Nullable (e.NewValue :?> bool)https://stackoverflow.com/questions/33257724
复制相似问题