为啥这个组合框不显示项目?
Posted
技术标签:
【中文标题】为啥这个组合框不显示项目?【英文标题】:Why isn't this combobox displaying items?为什么这个组合框不显示项目? 【发布时间】:2018-04-17 16:54:34 【问题描述】:我正在编写一个导入实用程序,我希望用户能够从 CSV 上传,然后将列定向到他们想要的位置。
因此,为了做到这一点,我将每列的标题设为一个 ComboBox,其中填充了所有可能的列。
xaml
<DataGrid x:Name="ImportTable"
ItemsSource="Binding displayTable"
AutoGeneratingColumn="OnAutoGeneratingColumn"
AutoGenerateColumns="True"
CanUserAddRows="True"
CanUserDeleteRows="True"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
MaxWidth="1300"
MaxHeight="600"
/>
xaml.cs
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
var cb = new ComboBox();
foreach (DataColumn test in (DataContext as EnterValueDialogViewModel).displayTable.Columns)
Console.Out.WriteLine(test);
cb.ItemsSource = (DataContext as EnterValueDialogViewModel).displayTable.Columns;
e.Column.Header = cb;
这会正确打印出所有列,但组合框内实际上没有显示任何内容
Empty Combobox
组合框现在可以正确显示在下拉列表中。但我无法设置它的 selectedValue。以下代码打印出 selectedvalue 是正确的,但它最初仍填充为空白/未选中
var cb = new ComboBox();
cb.DisplayMemberPath = "ColumnName";
cb.SelectedValue = e.PropertyName.ToString();
cb.ItemsSource = (DataContext as EnterValueDialogViewModel).displayTable.Columns;
Console.Out.WriteLine(cb.SelectedValue);
e.Column.Header = cb;
【问题讨论】:
您是否尝试过为您的组合框设置DisplayMemberPath
属性?在我看来,您可能有项目,这些项目只是显示为空白。
你会如何设置这个?
【参考方案1】:
您可以尝试设置组合框的DisplayMemberPath
。
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
var cb = new ComboBox();
cb.DisplayMemberPath = "SomePropertyFromYourCollection";
foreach (DataColumn test in (DataContext as EnterValueDialogViewModel).displayTable.Columns)
Console.Out.WriteLine(test);
cb.ItemsSource = (DataContext as EnterValueDialogViewModel).displayTable.Columns;
e.Column.Header = cb;
文档here。
【讨论】:
这是正确的!谢谢我想将 selectedValue 设置为 e.PropertyName。但它似乎不起作用。【参考方案2】:你需要设置我认为的组合框的DisplayMemberPath
和SelectedValuePath
。
这些将是您的数据文件中的列名。
它应该看起来像这样:
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
var cb = new ComboBox();
foreach (DataColumn test in (DataContext as EnterValueDialogViewModel).displayTable.Columns)
Console.Out.WriteLine(test);
cb.ItemsSource = (DataContext as EnterValueDialogViewModel).displayTable.Columns;
cb.DisplayMemberPath = "Column1";
cb.SelectedValuePath = "Column2";
e.Column.Header = cb;
如果有帮助,请告诉我。
【讨论】:
所以我已经让 DisplayMemberPath 指向“ColumnName”并且有效。我希望 selectedValue 基于 e.PropertyName。这应该是该列的默认标题。但这似乎不起作用 如果你说e.PropertyName.ToString()
会怎样
刚刚添加到问题中。我正在这样做。以上是关于为啥这个组合框不显示项目?的主要内容,如果未能解决你的问题,请参考以下文章