de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
Ruven Graf
Ruven Graf
質問

MainWindowから(Telerikを使用して)ページのDataContextにアクセスする

私は比較的WPFに不慣れで、解決策を見つけることができないような問題に出くわしました。

私はそのような問題に関するスレッドがすでにあると確信していますが、私の不足している知識に関しては、私はそれを見つけられなかったか、単にそれを理解しなかった可能性が非常に高いです。

私の問題:

私はC#でWPFアプリケーションを開発しています。それは巨大なViewModelとXAMLを持つ大きなMainWindowを持つOutlookスタイルのアプリケーションです。 私がやろうとしていたのは、単一のコードファイルを少し分割して、もう少しモジュール化してコンパクトにすることです。 私はTelerik Controlsを使用していて、単一のSplitContainerのコンテンツをPagesにアウトソーシングしようとしました。

今日、どういうわけかばかげていて複雑すぎないような新しい状況が起こりましたが、どういうわけか私はそれを機能させることができません。

状況:

私は自分の "MainWindow"にTreeviewを持っていて、そこで選択を変更したときはいつでも、自分がバインディングしている自分のPageのプロパティを変更したいのです。

そのため、 "TreeView_3"の項目をクリックしたときに、 "Page_X"のDataContextにEventHandler(SelectionChanged_TreeView3)を介してプロパティを設定します。

私がメインウィンドウでこれをしなければならなかったら、私は通常そのようにするでしょう:

UserViewModel uvm = mainGrid.DataContext as UserViewModel;

それから私がアクセスしたい特定のUserViewModel(MainWindowのViewModel)のどんなプロパティでも呼び出すだけです。

これはイベントハンドラが呼び出される場所なので、 "mainGrid.DataContext"は常にMainWindowを参照するので、明らかに同じことをページに対しても同じことはできません。

だから私が必要とするのは、異なるViewModelを持つページからDataContextにアクセスする方法について少し説明することです。

説明するためにコードが必要な場合は、教えてください。

0 2018-08-31T07:59:21+00:00 4
Uwe Keim
Uwe Keim
編集された質問 31日 8月 2018 в 8:42
プログラミング
wpf
c#
datacontext
mvvm
viewmodel
Timmy Fuller
31日 8月 2018 в 8:24
2018-08-31T08:24:00+00:00
さらに
ソース
編集
#80557605

例を見ないで言うのは難しいです。しかし、それはあなたがViewModelsにINotifyPropertyChangedを実装する必要があるということかもしれません?

https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification

OnPropertyChanged( "PropertyName")を呼び出す。 viewmodelプロパティのセッターでは、UIが変更を反映します。

また、両方のビューが同じオブジェクトを参照しており、同じオブジェクトのコピーを参照していないことを確認してください。

0
0
Timmy Fuller
31日 8月 2018 в 8:24
2018-08-31T08:24:00+00:00
さらに
ソース
編集
#80557606

例を見ないで言うのは難しいです。しかし、それはあなたがViewModelsにINotifyPropertyChangedを実装する必要があるということかもしれません?

https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-property-change-notification

OnPropertyChanged( "PropertyName")を呼び出す。 viewmodelプロパティのセッターでは、UIが変更を反映します。

また、両方のビューが同じオブジェクトを参照しており、同じオブジェクトのコピーを参照していないことを確認してください。

0
0
linuxrocks
31日 8月 2018 в 8:39
2018-08-31T08:39:08+00:00
さらに
ソース
編集
#80557612

あなたはあなたの懸念を切り離す必要があります。背後にあるコードには、表示関連のものを処理するコードしかないはずです。ほとんどの場合、私の後ろにあるコードは空です。

あなたのViewModelでは、あなたのデータ関連ロジックを扱うべきです。そのため、背後のコードにデータコンテキストをキャストするのではなく、ビューモデルの Command でクリックを処理します。

TreeView の SelectedItemChanged にコマンドをバインドすることはできませんので、インタラクショントリガを使うことができます。


    
        
            
        
    

0
0
linuxrocks
31日 8月 2018 в 8:39
2018-08-31T08:39:08+00:00
さらに
ソース
編集
#80557614

あなたはあなたの懸念を切り離す必要があります。背後にあるコードには、表示関連のものを処理するコードしかないはずです。ほとんどの場合、私の後ろにあるコードは空です。

あなたのViewModelでは、あなたのデータ関連ロジックを扱うべきです。そのため、背後のコードにデータコンテキストをキャストするのではなく、ビューモデルの Command でクリックを処理します。

TreeView の SelectedItemChanged にコマンドをバインドすることはできませんので、インタラクショントリガを使うことができます。


    
        
            
        
    

0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Денис Анненский
登録済み 2日前
2
365
登録済み 6日前
3
True Image
登録済み 6日前
4
archana agarwal
登録済み 1週間前
5
Maxim Zhilyaev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属