了解绑定DataGridComboBoxColumn Itemssource和SelectedItem

时间:2015-02-06 11:00:53

标签: c# wpf datagrid combobox

我不明白如何正确绑定DataGridComboBoxColumn。 我的DataGrid TextColum显示我的RowEntries中的值,但ComboBoxColumn未填充。

我有一个名为RowEntries的RowEntryView的ObservableCollection派生出来:

public class DataTypes : RowEntryView
{
    private string _value;
    public string[] ValuesPossible {get; set; }
    public string Value 
    {
        get
        {
            return _value;
        }

        set
        {
            _value = value;
             OnPropertyChanged(new PropertyChangedEventArgs("Value"));
        }
    }
}

我的DatagridTextColum显示Value变量。我的DataGridComboBoxColumn是空白的。可能的值填充{" A"," B"," C"},值用" A"

填充
<DataTemplate x:Name="myDataTemplate">
       <DataGrid RowHeight="30" VerticalContentAlignment="Center" x:Name="myDataGridMain" CanUserAddRows="False" AutoGenerateColumns="False" ItemsSource="{Binding RowEntries}" >
       <DataGrid.Columns>    
       <DataGridTextColumn Width="4*" IsReadOnly="True" x:Name="dataGridColumnDescription" Header="Value" Binding="{Binding Value}">
       </DataGridTextColumn>
       <DataGridComboBoxColumn Header="Type" ItemsSource="{Binding ValuesPossible}" SelectedItemBinding="{Binding Value}"></DataGridComboBoxColumn>
                 </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>

enter image description here

2 个答案:

答案 0 :(得分:0)

ItempsSource是您要显示的魔杖项目列表。 SelectedItem(not selectedItemBinding)是您选择的对象。基本上你需要有SelectedItem =“{Binding Value}”。 现在,为了能够通知您datacontext有关每个新选择的更改,您的对象必须实现INotifyPropertyChanged,然后您的绑定将变为: SelectedItem =“{Binding Value,UpdateSourceTrigger = PropertyChanged,Mode = TwoWay}”。 你会在网上找到很多例子。

答案 1 :(得分:0)

然后我建议使用DataGridTemplateColumn:

                            <DataGridTemplateColumn Header="Type">
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <ComboBox   ItemsSource="{Binding ValuesPossible}"
                                                    SelectedItem="{Binding Value, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"></ComboBox>
                                    </DataTemplate>
                                       </DataGridTemplateColumn.CellEditingTemplate>
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock  Text="{Binding}"></TextBlock>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>