none
DataGridのComboBoxについて RRS feed

  • 質問

  • お世話になります。

    WPFでデータグリッドに名前と都道府県の列を作りました。

    		<DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="10,10,0,0"
    				Name="dataGrid1" VerticalAlignment="Top" Width="200" ItemsSource="{Binding}">
    			<DataGrid.Columns>
    				<DataGridTemplateColumn Header="名前">
    					<DataGridTemplateColumn.CellTemplate>
    						<DataTemplate>
    							<TextBox Text="{Binding 名前}"></TextBox>
    						</DataTemplate>
    					</DataGridTemplateColumn.CellTemplate>
    				</DataGridTemplateColumn>
    				<DataGridTemplateColumn Header="都道府県">
    					<DataGridTemplateColumn.CellTemplate>
    						<DataTemplate>
    							<ComboBox Name="cmb都道府県" ItemsSource="{Binding 都道府県List}" DisplayMemberPath="名称" SelectedValuePath="code都道府県" SelectedValue="{Binding 名称}"></ComboBox>
    						</DataTemplate>
    					</DataGridTemplateColumn.CellTemplate>
    				</DataGridTemplateColumn>
    			</DataGrid.Columns>
    		</DataGrid>
    

    そして、画面起動時に行を追加するようにしました。

    	public partial class MainWindow : Window
    	{
    		public MainWindow()
    		{
    			InitializeComponent();
    		}
    
    		private void Window_Loaded(object sender, RoutedEventArgs e)
    		{
    			var 都道府県List = new List<都道府県>();
    			都道府県List.Add(new 都道府県() { code = "1", 名称 = "東京" });
    			都道府県List.Add(new 都道府県() { code = "2", 名称 = "大阪" });
    
    			var 人List = new List<人>();
    			人List.Add(new 人() { 名前 = "鈴木", code都道府県 = "1", 都道府県List = 都道府県List });
    			人List.Add(new 人() { 名前 = "佐藤", code都道府県 = "2", 都道府県List = 都道府県List });
    
    			dataGrid1.DataContext = 人List;
    		}
    	}
    
    	class 人
    	{
    		public string 名前 { get; set; }
    		public string code都道府県 { get; set; }
    		public List<都道府県> 都道府県List { get; set; }
    	}
    
    	class 都道府県
    	{
    		public string code { get; set; }
    		public string 名称 { get; set; }
    	}
    

    実行すると

    鈴木,東京

    佐藤,東京

    となってしまいました。

    鈴木,東京

    佐藤,大阪

    となるようにしたいんですがどうすれば良いでしょうか?

    2012年2月15日 10:13

回答

  • SelectedValueのBindingがcode都道府県で、SelectedValuePathがcodeになると思います。
    ただ、人クラスのメンバーに都道府県Listを持たすのは冗長だと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク yty0918 2012年2月16日 1:07
    2012年2月16日 0:45
    モデレータ

すべての返信

  • SelectedValueのBindingをcodeにしたらどうでしょうか?

    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/

    2012年2月15日 12:41
  • SelectedValueのBindingがcode都道府県で、SelectedValuePathがcodeになると思います。
    ただ、人クラスのメンバーに都道府県Listを持たすのは冗長だと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク yty0918 2012年2月16日 1:07
    2012年2月16日 0:45
    モデレータ
  • かずき_okazukiさん

    回答ありがとうございます。

    しかし、残念ながらその方法ではうまくいきませんでした。

    2012年2月16日 0:56
  • trapemiyaさん

    回答ありがとうございます。

    その方法でうまくいきました。

    >人クラスのメンバーに都道府県Listを持たすのは冗長だと思います。

    おそらく他にいい方法があるんだと思いますが、時間がないのであとで調査したいと思います。

    2012年2月16日 1:07