【问题标题】:Binding ComboBoxColumn to collection from DataGrid's ItemsSource in WPF DataGrid将 ComboBoxColumn 绑定到 WPF DataGrid 中 DataGrid 的 ItemsSource 的集合
【发布时间】:2023-03-07 09:11:01
【问题描述】:

请帮助我弄清楚如何在 WPF 的 DataGrid 中使用 ComboBoxColumn。 我正在尝试创建一个设备列表,其中每个设备在“日志”字段中都有动态状态列表。

<DataGrid AutoGenerateColumns="False" Margin="12,6,12,12" Name="dataGrid1" Grid.Row="1"  SelectionUnit="FullRow">
    <DataGrid.Columns>
            ...
         <DataGridComboBoxColumn Header="Log" 
                                 ItemsSource="{Binding log, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Device}}}"/>
    </DataGrid.Columns>
</DataGrid>

public partial class MainWindow : Window
{
    public ObservableCollection<Device> devices;
    ...
}

public MainWindow() 
{
    ...
    dataGrid1.ItemSource = devices;
}

public class Device : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    public Device() {log = new ObservableCollection<string>();}
    ...
    private ObservableCollection<string> _log;
    public ObservableCollection<string> log { get { return _log; } 
                                              set { _log = value; OnPropertyChanged("log"); } }
}

您能否分享任何建议:如何在每个对象的数据网格列表“日志”中的每个组合框中显示?

【问题讨论】:

  • 首先通过在日志(集合)的get方法上应用断点来检查您的datagridcolumn是否正在检索日志。如果它在那个断点上,那么检查你的日志(集合)是否为空。只需检查它。
  • log(collection) 在运行时绝对不是空的。但 DataGridComboBoxColumn 不检索日志。
  • 所以这是您在相对源部分中的绑定方式的问题..您无法提供日志所在的正确路径。所以只要把你的整个 windows.cs 代码放在这里我会检查它并希望它对你来说是正确的
  • 我同意,该错误只能在绑定中:&lt;DataGridComboBoxColumn Header="Log" ItemsSource="{Binding log, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Device}}}"/&gt; 可能你知道,如何将 datagridcombobox 绑定到 datagrids 的 datacontext?
  • 好的。。把你的windows.cs代码贴在这里吧。我会查出来的

标签: wpf binding datagrid combobox


【解决方案1】:

MSDN: DataGridComboboxColumns 说:

要填充下拉列表,首先将 ItemsSource 属性设置为 使用以下选项之一的 ComboBox:

  • 静态资源。有关详细信息,请参阅静态资源标记扩展。
  • 一个 x:静态代码实体。有关详细信息,请参阅 x:静态标记扩展。
  • ComboBoxItem 类型的内联集合。

所以基本上只是绑定到数据对象的集合属性,最好使用DataGridTemplateColumn

<DataGridTemplateColumn Header="Log">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
             <ComboBox ItemsSource="{Binding log}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这种类型的列也为您提供了更多模板的可能性。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 2014-08-23
    • 2018-07-16
    • 2021-03-18
    • 2012-08-17
    • 2011-12-17
    • 2020-01-30
    • 2011-07-10
    • 2013-01-14
    相关资源
    最近更新 更多