&tag(WPF/DataGrid/DataGridColumn);
*目次 [#t0a80104]
#contents
*参考情報 [#v834cf42]
-[[WPF]]

*DataGridComboBoxColumn [#s17505ee]
**基本 [#ndd44f7c]
-[[WPF DataGrid – Dynamically updating DataGridComboBoxColumn - Vincent Sibal's Blog - Site Home - MSDN Blogs:http://blogs.msdn.com/b/vinsibal/archive/2008/12/17/wpf-datagrid-dynamically-updating-datagridcomboboxcolumn.aspx]]によると、DataBindingを使っている場合普通に表示するだけでも結構めんどくさい。ElementStyleやEditingElementStyleを定義しないと表示できない?

**編集可能にする [#l4fbc04e]
-[[combobox - using wpf datagridcomboboxcolumn's IsSynchronizedWithCurrentItem - Stack Overflow:http://stackoverflow.com/questions/4700346/using-wpf-datagridcomboboxcolumns-issynchronizedwithcurrentitem]]では結局DataGridTemplateColumnを使っている。DataGridComboBoxColumnでは不可能なのかも。

**共通のItemsSourceを使う [#z5263074]
-各行に選択肢リストをもたせるのではなく、共通の選択肢リストをもたせたい。
-[[Using WPF DataGridComboBoxColumn with MVVM - Binding to Property in ViewModel - Stack Overflow:http://stackoverflow.com/questions/3562934/using-wpf-datagridcomboboxcolumn-with-mvvm-binding-to-property-in-viewmodel]]ではRelativeSourceを使っておやのDataContextを探す方法で実現している。

**値が表示されたり消えたり妙な動作 [#i3691ad8]
DataGridComboBoxでElementStyleやEditingElementStyleを指定し、かつIsSynchronizedWithCurrentItem=Trueを使うと同列の他の行の表示がみだれるのでやめたほうがよいっぽい。
#pre{{
                <DataGridComboBoxColumn Width="*" Header="変数の型">
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Path=Types}"/>
                            <!-- これ -->
                            <Setter Property="IsSynchronizedWithCurrentItem" Value="True"/>
                            <Setter Property="DisplayMemberPath" Value="Label"/>
                            <Setter Property="IsReadOnly" Value="True"/>
                            <Setter Property="SelectedItem" Value="{Binding Type}"/>
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Path=Types}"/>
                            <!-- これ -->
                            <Setter Property="IsSynchronizedWithCurrentItem" Value="True"/>
                            <Setter Property="DisplayMemberPath" Value="Label"/>
                            <Setter Property="SelectedItem" Value="{Binding Type}"/>
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
}}
*DataGridTemplateColumn [#qc97e048]
**ユーザーコントロールを表示する [#b1206246]
-[[wpf - custom control in DataGridTemplateColumn - Stack Overflow:http://stackoverflow.com/questions/4536987/custom-control-in-datagridtemplatecolumn]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS