問題タブ [mvvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3494 参照

c# - WPF MVVM バインディング Checkbox.IsChecked をディクショナリ内の名前付きアイテムに

すべてが同じ種類の異なる選択を表すチェックボックスのグループがあります (私の例では、それらはすべて異なるファイルの種類です)。ViewModel の個々のプロパティにそれぞれをバインドするのはやり過ぎのように感じます。それらをすべて 1 つのコレクションにバインドし、バインド構文を使用して、各チェックボックスをコレクション内の特定の項目にキーでバインドすることをお勧めします。私はMVVMパターンに固執しようとしているので、怠惰になってCheckedイベントなどを処理したくないだけです。

WPF バインディング構文を使用してコレクション内のパスまたはキーを表現する方法はありますか? たとえば、Dictionary<string, bool>呼び出された FileTypes を ViewModel のパブリック プロパティとして公開する場合、チェックボックスの 1 つを FileTypes["aspx"] にバインドする方法はありますか? のようなより複雑なデータ構造がある場合はどうなりDictionary<string, Dictionary<string, int>>ますか?

0 投票する
2 に答える
2337 参照

silverlight - Silverlight MVVM ListBoxItem IsSelected

ListBox にバインドされた ViewModel のコレクションがあります。それぞれの IsSelected プロパティをバインドしようとしています。WPF では、スタイルを設定することで機能します。

これは Silverlight では機能しません。どうすればこれを達成できますか?

0 投票する
2 に答える
17994 参照

silverlight - MVVM パターンの Silverlight 子ウィンドウ

Silverlight (3) で MVVM パターンを使用して ChildWindow/popup からデータを取得する正しい方法を見つけようとしています。例: データ入力フォームを備えたメイン ページがあり、顧客のリストを含むポップアップを開きたいと考えています。ユーザーが顧客を選択すると、選択した顧客をメインページに転送したいと思います。これは、私が現在使用している(例)コードです。

メインページ

子ウィンドウ

これは正しい方法ですか、それとももっと「簡単な」方法はありますか?

乾杯、ロク

0 投票する
1 に答える
240 参照

mvvm - CommandSink の背後にある比喩は何ですか?

私は、MVVM コンテキストでコマンドを使用することを簡素化するソリューションであるCommandSink に関する Josh Smith のコードと記事に取り組んでおり、非常に役立つようです。

しかし、「シンク」という言葉が何を指しているのかを理解していないため、コンセプトについて何かが欠けているように感じます。

  • コマンドはコード ビハインドを超えて ViewModel にシンクしますか?
  • コマンドは、たとえば皿がシンクにあるようにコレクションにありますか?
  • それとも、これは View と ViewModel の同期を維持するという言葉遊びですか?
0 投票する
2 に答える
5015 参照

wpf - WPF MVVM:ResourceDictionaryの設定よりも規則?


アップデート

StackOverflow の wiki の精神では、ここに更新があります。

以下に、Joe White の IValueConverter の提案をスパイクしました。それは魅力のように機能します。

これの「クイックスタート」の例を書きました。これは、安価な文字列置換を使用して、ViewModels->Views のマッピングを自動化します。ViewModel を表す View が見つからない場合、デフォルトで「Under Construction」ページが表示されます。Joe White のアイデアだったので、このアプローチを「WPF MVVM White」と呼んでいます。ここにいくつかのスクリーンショットがあります。

最初の画像は、純粋な命名規則に基づいて、「[SomeControlName]ViewModel」に対応する「[SomeControlName]View」がある場合です。2 つ目は、ModelView にそれを表すビューがない場合です。ViewModel から View への長いマッピングを持つ ResourceDictionaries はもうありません。現在は純粋な命名規則です。

Wpf Mvvm ホワイト

ここにプロジェクトのダウンロードを投稿しました: Mvvm.White.Quickstart.zip


元の投稿

週末、WPF MVVMに関するJosh Smith の素晴らしい MSDN 記事を読みました。カルトクラシックになる運命にあります。

ViewModelをレンダリングするように WPF に要求するという魔法に頭を悩ませるのに、しばらく時間がかかりました。

「これがクラス、WPF です。それを表示するために使用する UI を見つけてください」と言っているようなものです。

この魔法を逃した人のために、WPF はResourceDictionary マッピングでModelViewのViewを検索し、対応するViewを引き出すことでこれを行うことができます。(下にスクロールして、図 10 ビューの提供)。

最初にすぐに思いつくのは、次の強力な命名規則が既に存在することです。

私の質問は:

ResourceDictionaryはプログラムで操作できるので、だれかが Regex.Replace に成功したかどうか疑問に思っています。そのため、ルックアップは自動的に行われ、新しい View/ViewModel は命名規則によって解決されますか?

[編集] 私が想像しているのは、ResourceDictionary へのフック/傍受です。

...また、相互運用機能を使用してプルアウトし*View$*ViewModel$クラス名を使用してコードで DataTemplate ディクショナリを構築する起動時のメソッドを検討します。

0 投票する
4 に答える
2046 参照

c# - 誰かがこの C# 構造を説明できますか: base.Executed += (s, e) =>

私はJosh Smith の CommandSink Exampleに取り組んでいますが、base.Executed += (s, e) =>...構造が私を投げかけています。誰かがこれを明確にするのを手伝ってくれますか?

私が理解していること:

  • base.CanExecute は、継承されたクラス CommandBinding のイベントです。
  • += はそのイベントにデリゲートを追加しています
  • デリゲートは、その行に続く無名関数です

私が理解していないこと:

  • (s,e) はその関数の署名ですか?
  • 変数 s はどこで使用されますか?

コンテキスト内のコードは次のとおりです。

0 投票する
17 に答える
52382 参照

c# - MVVMでは、ViewModelまたはModelはINotifyPropertyChangedを実装する必要がありますか?

私が試したほとんどのMVVMの例では、Modelが実装され ていますINotifyPropertyChangedが、Josh SmithのCommandSinkの例 では、ViewModelが実装されてINotifyPropertyChangedいます。

私はまだMVVMの概念を認知的にまとめているので、次のことを理解していません。

  • 作業を開始INotifyPropertyChangedするには、ViewModelにを配置する必要がありますCommandSink
  • これは単なる規範の逸脱であり、実際には問題ではありません
  • 常にモデルを実装する必要があります。INotifyPropertyChangedこれは単なる間違いであり、コード例からアプリケーションに開発された場合に修正されます。

あなたが取り組んできたMVVMプロジェクトで他の人はどのような経験をしましたか?

0 投票する
2 に答える
9520 参照

wpf - WPF-データからハイパーリンクコマンドを取得しますか?

WPFで、ハイパーリンクがオブジェクトプロパティから呼び出す必要のあるコマンドへの参照を取得するにはどうすればよいですか?

MVVMパターンを使用してWPFアプリケーションを作成しています。メインウィンドウのリストボックスにハイパーリンクが表示されます。各ハイパーリンクは、クリックされるとビューモデルのICommandプロパティの1つを呼び出します。どのICommandを呼び出すかを指定するにはどうすればよいですか?

これまでに試したことは次のとおりです。ハイパーリンクは、リストボックスのItemsSourceとしてバインドされているViewModel.Hyperlinksプロパティに含まれています。Hyperlinksプロパティには、タイプMyHyperlinkのオブジェクトが含まれています。

MyHyperlink.ViewModelCommandプロパティには、ハイパーリンクがクリックされたときに呼び出されるビューモデルICommandの名前が含まれています。その値を使用して、WPFハイパーリンクコントロールのCommandプロパティのPropertyPathを指定したいと思います。コマンドの名前でリストボックスのPropertyPathリソースを作成しようとしましたが、WPFはそれを受け入れません。これが私のXAMLです。

ハイパーリンクがクリックされたときに呼び出すICommandを指定するにはどうすればよいですか?(上記のように)リソースを作成しますか、それとも他の方法で作成しますか?これはXAMLで行う必要があります。コードビハインドに頼りたくありません。ご協力いただきありがとうございます!

0 投票する
2 に答える
913 参照

.net - WPFMVVMセットコントロールフォーカス

MVVMでユーザーコントロールフォーカスをどのように設定しますか?Focusmanager.FocusElement ={Binding...}を使用しても影響はありません。

これが私のXAMLです。

一度タブを押すまで、ユーザーコントロールはフォーカスを取得しません。

0 投票する
4 に答える
4064 参照

c# - ビューを含むビューで DataContext はどのように継承されますか?

Josh Smith の WPF CommandSink の例を再構築していますが、彼のデータ バインディングについて理解できないことがいくつかあります。特に、データ コンテキストを持つウィンドウに含まれる別のビューにビューが含まれている場合に、データ コンテキストがどのように継承されるかについてです。

  • すべてのデータ バインディングは XAML ファイルで宣言されており、ウィンドウやビューの背後にコードはまったくありません (いいですね)。
  • 一番上の Window はその DataContext を CommunityViewModel として定義し、単に CommunityView を表示します
  • 質問: それでは、CommunityViewModel では、jas:CommandSinkBinding.CommandSink="{Binding}"実際に何をしますか? 「CommandSink」は添付プロパティなので、これは CommandSinkBinding オブジェクトの「CommandSink」と呼ばれる添付プロパティの値として DemoWindow から継承された Binding を「添付」していますか?

  • 質問:また、PersonView には DataContext がないようですが<TextBlock Text="{Binding Name}" Width="60" />、バインディングが設定されていることを前提とする行があります。PersonView は自動的に CommunityView の行からバインディングを取得しItemsSource="{Binding People}"ますか?

ここで明確にしていただきありがとうございます。

DemoWindow.xaml:

CommunityView.xaml:

PersonView.xml: