質問: WPFにあまり知識のない人間です。 C#のWPFでアプリケーションの作成をしています。 そのアプリケーションに新しくユーザーコントロールを追加しようとしていますが、 メインViewからユーザーコントロールへ値を渡す方法が調べてみてもなかなか分かりません。 依存プロパティやItemTemplateなど色々方法があるみたいですが、イマイチイメージが できていない状態です。 下記に何をしたいユーザーコントロールなのか記載しますので、どなたか知恵を貸していただけないでしょうか。 <やりたいこと> StackPanelで6分割したプレビューモニターを作成したいです。 メインViewから数字の0~5のいずれかを入力し、その数字に応じて 6分割したモニターに色を付けたいです。 方法として知りたいことは、メインViewで入力した値をプレビューモニターへ 値を渡して、プレビューモニターの画面表示を変えたいことです。 (プレビューモニターの作りは概ねできています。) <イメージ図> ↓"0"を入力した時のプレビューモニター ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ↓"4"を入力した時のプレビューモニター ■■■■■■■■ ■■■■■■■■ □□□□□□□□ □□□□□□□□ □□□□□□□□ □□□□□□□□ ↓"4"を入力した時のプレビューモニター ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ ■■■■■■■■ □□□□□□□□ □□□□□□□□
回答: こんにちは。 MVVMにとらわれずにやるのであれば、ユーザコントロールに依存プロパティを実装するのが簡単と思います。 流れとしては、 1. 依存プロパティの実装(仮に名前を`SplitCount`とします) 2. `SplitCount`変更のイベントを実装(`SplitCountChanged`イベント) 3. `SplitCountChanged`イベントをユーザコントロール内で購読 4. `SplitCountChanged`のイベントハンドラにパネルに色付けする処理を実装 5. 親のコントロールから`SplitCount`プロパティをコントロールにバインドする これで親コントロールの分割数が変更されたタイミングで、ユーザコントロール内にイベントが発生するようになると思います。何か抜けてたらごめんなさい。 依存プロパティについては以下のQiitaの記事が大変役に立ちます。 Qiita WPF 依存プロパティの作り方 以上です、参考になれば幸いです。