【发布时间】: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;
}
这会正确打印出所有列,但组合框内实际上没有显示任何内容
组合框现在可以正确显示在下拉列表中。但我无法设置它的 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属性?在我看来,您可能有项目,这些项目只是显示为空白。 -
你会如何设置这个?