viewModelで宣言されたプロパティをバインドして別のviewModelから値を取得するにはどうすればよいですか?wpf ViewModelプロパティ他のビューモデルからバインドする
InvoiceViewModel(ユーザーコントロールまたはウィンドウまたはDataTemplateのであれば私の請求書のデザインに関係なく)
私は2つのviewmodels(を実装INotifyPropertyChangedの)と1ビュー
InvoiceViewを持って
を説明しましょう
NoteListingVM
I(これのviewmodelは、それがTableRefIDプロパティレットの名前を持っています) N ViewInvoice私はそれとエキスパンダは、特定のinvoiceIDにリンクされているいくつかのノートを表示する(NoteListingVM)にDataContextのセットをだ持っ
i「はバインディング」は以下の
<Expander Header="NOTES" DockPanel.Dock="Top" Foreground="{StaticResource AlternateForeGround}">
<DockPanel>
<DockPanel.DataContext>
<WendBooks:NoteListingVM TableRefID="{Binding InvoiceID}" x:Name="TransactionNotes"></WendBooks:NoteListingVM>
</DockPanel.DataContext>
Aしようとすると、私は問題を抱えていますタイプ 'NoteListingVM'の 'TableRefID'プロパティで設定することはできません。 「Binding」は、DependencyObjectのDependencyPropertyにのみ設定できます。
エラーが言ったように、私はプロパティを使用することはできません。
私はDependencyPropertyを使用すると思います。しかし、InotifyPropertyChangedを実装すると、DependencyPropertyはViewModelで正常に動作しません。 (これは、ViewModelを実装するときにほとんどのユーザーが提案するものです(「INotifyPropertychanged」)
DependencyPropertysは、userControlまたはCustomControlがあるときにうまく機能します。しかし、これは私の場合ではありません。(InvokeIDが変更されたときに、NoteListingViewModelに "パラメータ"を割り当て/渡したいViewModelしか持っていません)
私はInvoiceIDを送信しますxaml)をNoteListingViewModelにフィルタリングして表示させ、私の前にある現在の請求書にリンクしているノートのみを表示しますか?適切な方法は何ですか?私は何か私はmvvmパターンを逃したか、または誤解していると確信していますか?
aha :)あなたは正しいと思いますが、このような要件があるときにこれを実行するのは適切な方法ですか?中央のView Modelを他のViewModelsと分離しておくと、より便利で受け入れやすいパスにすべきですか? (どちらかの間に何らかの論理があるかどうか)考えているだけです(MVVMのパターンと用量は何とか思っています)。何とか... – user2160275
@ user2160275誰があなたに言ったのですか?お互いにあなたのビューモデルを隠すことによって避けようとしている問題は何ですか? –
はい、私はこれが間違っていると思いますか?(正解)私はNotesVVMを持っていることをInvoiceVMが知る必要があるということを意味しています。 2 ViewModelsのビューを持っています。 ViewModelsを使わずにそれらの間で値を共有してください。 – user2160275