0

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を見始めたばかりです..)

4

0 に答える 0