DialogResult в F#
Пытаясь извлечь DialogResult из окна в приложении MVVM, я наткнулся на этот предыдущий вопрос. После внесения предложенных изменений образец выглядит следующим образом:
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#.
Я не могу найти рабочее решение, любая помощь будет оценена.
1 ответ
Решение
Я не эксперт WPF, но в этом связанном решении C#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)