【发布时间】: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 代码放在这里我会检查它并希望它对你来说是正确的
-
我同意,该错误只能在绑定中:
<DataGridComboBoxColumn Header="Log" ItemsSource="{Binding log, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Device}}}"/>可能你知道,如何将 datagridcombobox 绑定到 datagrids 的 datacontext? -
好的。。把你的windows.cs代码贴在这里吧。我会查出来的
标签: wpf binding datagrid combobox