質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

10992閲覧

[C#][WPF][Prism]複数のUserControlを持つ場合のMVVMについて

Panai

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/04/24 10:49

概要

UserControlで作成した画面(孫)を複数表示している画面(子)をUserControlで作成しました。
この(子)をWindowの画面(親)で表示したいです。

詳細

お世話になっております。WPF勉強中の者です。

(孫)はView,ViewModel,Modelが別々に存在していて数が固定です。
(子)もView,ViewModel,Modelが別々に存在していますが数は動的に変動します。
(親)は1つのView,ViewModel,Modelが存在しております。

(親)の画面操作によって、(子)のプロパティを変更させたり
(孫)のプロパティをリアルタイムで変動させるようにしたいのですが
MVVM的にどう作成すればよいか分かりません。

(孫)や(子)から(親)のプロパティを見ることはありませんので
(親)のModelに(孫)や(子)の実態を持つイメージなのですが
その際、ViewModelとどう連結すればよいのか分からなくなってしまいました。
(プロパティの変更通知はイベントで行う?)

各ViewModel、Modelの実態をどこに持てばいいのか?
VewModel,Modelの繋がりをどうすればよいのか?
拙い文章かつ上手くまとまっておらず申し訳ありませんが、何かアドバイス等頂けると幸いです。

また、その他何か必要な情報等ありましたらお教えください。

試したこと

(親)ViewModelにObservableCollectionで(子)ViewModelの実態を持ち
ItemsControlでViewを表示する

<ItemsControl ItemsSource="{Binding ChildViewModel}"> <ItemsControl.ItemTemplate> <DataTemplate> <child:ChildCollectionView DataContext="{Binding}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>

(子)のViewModelは以下のように作成しています

public class ChildViewModel : BaseViewModel {     // Modelクラス public ChildData Data { get { return _data; } set { SetProperty(ref _data, value); } } private ChildData _data; } public class ChildCollectionViewModel : BaseViewModel { public ObservableCollection<ChildViewModel> ViewModels { get { return _viewModels; } set { SetProperty(ref _viewModels, value); } } private ObservableCollection<ChildViewModel> _viewModels = new ObservableCollection<ChildViewModel>(); public ChildCollectionViewModel() { // 仮に3回 for (int i = 0; i < 3; i++) { var viewModel = new ChildViewModel(); ViewModels.Add(viewModel); } } }

(子)-(孫)も同じように設定していますが(親)画面には何も表示されません。

補足情報(FW/ツールのバージョンなど)

Windows10
visual studio 2015
C#
.net 4.6.1
prism 5.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/04/24 11:00

ソースの一部を掲載するのではなく問題の再現する最小のソースを作って全て掲載してください。でなければこちらで確認するために不足分を補わなければなりませんが、その部分に問題があった場合解決が困難です。
Zuishin

2018/04/24 11:01

またソースを削る作業で自己解決できる場合もあります。現時点のソースでなく最小のソースというのが重要です。
Panai

2018/04/24 11:37

アドバイスありがとうございます。始めての投稿でしたので勝手が分かりませんでした。最小のソースを作成し再度依頼したいと思います。
ebiryo

2018/04/24 23:30

画面、画面と書かれていますが、何を指しているのでしょうか? 提示していただいたソースでは構成がまったくわからないので、回答のしようがないと思います。
guest

回答2

0

質問をまとめて再度依頼させていただきます
とりあえず回答いただいた方にベストアンサーします

投稿2018/04/24 23:35

Panai

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Prism だと、DIを使って、変数を共有するとかするはず。

UWP版だけど、これが最強のサンプルなので、これ見るといいよ。
https://github.com/PrismLibrary/Prism-Samples-Windows

App.xaml.cs
での、DIの定義をみるといいかと。

投稿2018/04/24 11:40

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問