###前提・実現したいこと
クラスと関連付けられたComboBoxを複数配置したいと考え、以下のようなコードを書きました。
このコードでは省略してますが、コンボボックスで選択した項目に設定されている変数をBindingで表示や変更させることなどもできています。
(Personを選んだら年齢を表示。Bookを選んだら著作者表示など)
しかし、以下のコードではPersonAddのボタンの処理と、BookAddのボタンの処理を共存させられません。
###該当のソースコード
C#
1using System.Windows; 2 3namespace WpfApplication2 4{ 5 /// <summary> 6 /// MainWindow.xaml の相互作用ロジック 7 /// </summary> 8 9 public partial class MainWindow : Window 10 { 11 public MainWindow() 12 { 13 InitializeComponent(); 14 } 15 16 private void PersonAddButton_Click(object sender, RoutedEventArgs e) 17 { 18 var List = this.DataContext as PersonList; 19 List.PersonList_Items.Add(new Person { Name = "新しいPerson" }); 20 } 21 22 private void BookAddButton_Click(object sender, RoutedEventArgs e) 23 { 24 var List = this.DataContext as BookList; 25 List.BookList_Items.Add(new Book { Name = "新しいBook" }); 26 } 27 } 28} 29
C#
1using System.Collections.ObjectModel; 2 3namespace WpfApplication2 4{ 5 //Personのクラス 6 public class Person 7 { 8 public string Name { get; set; } 9 public int Age { get; set; } 10 } 11 12 //Bookのクラス 13 public class Book 14 { 15 public string Name { get; set; } 16 public string Author { get; set; } 17 } 18 19 //-------------------------------------------- 20 21 public class PersonList 22 { 23 public PersonList() 24 { 25 PersonList_Items = new ObservableCollection<Person> { }; 26 } 27 public ObservableCollection<Person> PersonList_Items { get; set; } 28 public Person PersonList_SelectedItem { get; set; } 29 } 30 31 public class BookList 32 { 33 public BookList() 34 { 35 BookList_Items = new ObservableCollection<Book> { }; 36 } 37 public ObservableCollection<Book> BookList_Items { get; set; } 38 public Book BookList_SelectedItem { get; set; } 39 } 40}
<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#どころかプログラムも初心者なので、盛大な勘違いをしているかもしれませんがご容赦ください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/09/19 00:57