【问题标题】:Understand Binding DataGridComboBoxColumn Itemssource and SelectedItem了解绑定 DataGridComboBoxColumn Itemssource 和 SelectedItem
【发布时间】:2015-02-06 11:00:52
【问题描述】:

我不明白与 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>

【问题讨论】:

    标签: c# wpf datagrid combobox


    【解决方案1】:

    那我建议使用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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回答:SelectedItem 在 DataGridComboBoxColum 上不可用,而 INotifychanged 在 RowEntryView 中实现
      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 2013-01-14
      • 2011-05-24
      • 2013-12-12
      • 1970-01-01
      • 2012-09-20
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多