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

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

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

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

WPF

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

解決済

DataContextで複数のクラスを使用するには

cube
cube

総合スコア34

C#

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

WPF

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

1回答

3評価

4クリップ

16679閲覧

投稿2016/09/18 13:57

###前提・実現したいこと
クラスと関連付けられたComboBoxを複数配置したいと考え、以下のようなコードを書きました。
このコードでは省略してますが、コンボボックスで選択した項目に設定されている変数をBindingで表示や変更させることなどもできています。
(Personを選んだら年齢を表示。Bookを選んだら著作者表示など)

しかし、以下のコードではPersonAddのボタンの処理と、BookAddのボタンの処理を共存させられません。

###該当のソースコード

C#

using System.Windows; namespace WpfApplication2 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void PersonAddButton_Click(object sender, RoutedEventArgs e) { var List = this.DataContext as PersonList; List.PersonList_Items.Add(new Person { Name = "新しいPerson" }); } private void BookAddButton_Click(object sender, RoutedEventArgs e) { var List = this.DataContext as BookList; List.BookList_Items.Add(new Book { Name = "新しいBook" }); } } }

C#

using System.Collections.ObjectModel; namespace WpfApplication2 { //Personのクラス public class Person { public string Name { get; set; } public int Age { get; set; } } //Bookのクラス public class Book { public string Name { get; set; } public string Author { get; set; } } //-------------------------------------------- public class PersonList { public PersonList() { PersonList_Items = new ObservableCollection<Person> { }; } public ObservableCollection<Person> PersonList_Items { get; set; } public Person PersonList_SelectedItem { get; set; } } public class BookList { public BookList() { BookList_Items = new ObservableCollection<Book> { }; } public ObservableCollection<Book> BookList_Items { get; set; } public Book BookList_SelectedItem { get; set; } } }
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication2" mc:Ignorable="d" Title="MainWindow" Height="100" Width="270"> <Window.DataContext> <local:PersonList/> </Window.DataContext> <Grid> <ComboBox x:Name="comboBox" Margin="10,10,132,0" VerticalAlignment="Top" ItemsSource="{Binding Path=PersonList_Items}" DisplayMemberPath="Name" /> <Button x:Name="PersonAddButton" Content="PersonAdd" Margin="10,37,177,0" VerticalAlignment="Top" Click="PersonAddButton_Click"/> <ComboBox x:Name="comboBox1" Margin="135,10,7,0" VerticalAlignment="Top" ItemsSource="{Binding Path=BooktList_Items}" DisplayMemberPath="Name" /> <Button x:Name="BookAddButton" Content="BookAdd" Margin="135,37,52,0" VerticalAlignment="Top" Click="BookAddButton_Click"/> </Grid> </Window>

###問題点

<Window.DataContext> <local:PersonList/> </Window.DataContext>

xamlのこの部分が、"PersonList"か"BookList"どちらかしか設定できません。
"PersonList"にするとBookAddを押したときに。"BookList"にするとPersonAddを押したときにエラーになります。

PersonListとBookListを同一のクラスの入れ子クラスにしたりもしましたが、上手くいきませんでした。

###質問
どのようにすれば2つの処理を共存させられますでしょうか?
ご教授のほどよろしくお願いいたします。

###補足
C#どころかプログラムも初心者なので、盛大な勘違いをしているかもしれませんがご容赦ください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

WPF

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