我想通过代码从我的 ViewModelClass 中对视图进行操作,而不仅仅是修改 XAML 绑定到的属性。
member x.SelectedUdl
with get() = selectedudl
and set value = selectedudl <- value
//do fancy things like
//this.Quotes12.ItemsSource <- asyncquotes.gethisto (undls |> Seq.head, 2012)
但是要做到这一点,我需要对组件本身的引用。
我有什么方法可以从 xaml 或其他方式添加对“this”的引用吗?
<UserControl.DataContext>
<ViewModel:QuotesViewModel>
<x:Arguments>
THIS
</x:Arguments>
</ViewModel:QuotesViewModel>
</UserControl.DataContext>
<DockPanel>
type QuotesViewModel(this:Window) =
inherit ViewModelBase()
编辑
我终于在第一个位置添加了一个 Global.fs 文件,以便所有编译单元都可以访问它
module Global
open FSharpx
type MainWindow = XAML<"MainWindow.xaml">
type Singleton private () =
static let instance = Singleton()
let mutable ivalue : MainWindow = null
static member Instance = instance
member this.Value
with get () = ivalue
and set value = ivalue <- value
let window () = Singleton.Instance.Value
请注意,它使用 XAML 类型提供程序,因此您必须将 FMVVM 模板 MainWindow 的 Frame 上移一级才能从强类型访问中受益。
然后在视图中,可以添加
Global.window().TextBox.Text <- "hello"
有了这个,我们可以以强类型的方式使用声明方式或代码方式。
初始化很容易完成
let mainWindow = MainWindow()
Global.Singleton.Instance.Value <- mainWindow
// Application Entry point
[<STAThread>]
[<EntryPoint>]
let main(_) =(new Application()).Run(mainWindow.Root)
(欢迎推荐,我刚开始看wpf ..)