XAML がバインドされているプロパティを変更するだけでなく、ViewModelClass の View をコードで操作したいと考えています。
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 のフレームを 1 つ上のレベルに移動する必要があることに注意してください。
次に、ビューで追加できます
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を見始めたばかりです..)