[英]How to use DataGridComboBoxColumn in C# project?
我的 C# WPF 项目遇到了一些问题,尤其是 DataGridComboBoxColumn 控件。 所以,这是我的MainWindow.xaml文件的一部分:
<DataGrid x:Name="WorkDayGrid"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="False"
ItemsSource="{Binding}">
<DataGrid.Resources>
<local:Times x:Key="times" />
<local:TimeConverter x:Key="timeConverter" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Arrival Time"
ItemsSource="{StaticResource times}"
SelectedItemBinding="{Binding ArrivalTime, Converter={StaticResource timeConverter}}" />
</DataGrid.Columns>
</DataGrid>
以及相应的“代码隐藏”:
public partial class MainWindow : Window
{
private ObservableCollection<WorkDay> _workDays = new ObservableCollection<WorkDay>();
public MainWindow()
{
InitializeComponent();
ComputeWorkDays();
WorkDayGrid.DataContext = _workDays;
}
private void ComputeWorkDays()
{
_workDays.Clear();
for (var i = 1; i <= 31; ++i)
{
var d = new WorkDay();
_workDays.Add(d);
}
}
}
WorkDay类的代码:
class WorkDay
{
public Time ArrivalTime { get; set; }
}
Times类的代码:
class Times : ObservableCollection<Time>
{
public Times()
{
var firstHour = 7;
var lastHour = 20;
var minuteStep = 5;
for (var i = firstHour; i < lastHour; ++i)
{
for (var j = 0; j < 60; j += minuteStep)
{
var t = new Time
{
Hour = i,
Minute = j
};
Add(t);
}
}
}
}
Time类的代码:
class Time
{
private int _hour = 0;
private int _minute = 0;
public int Hour
{
set => _hour = value;
}
public int Minute
{
set => _minute = value;
}
public override string ToString()
{
var fmt = "D2";
return _hour.ToString(fmt) + ":" + _minute.ToString(fmt);
}
}
TimeConverter类的代码:
class TimeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
var time = (Time)value;
return time.ToString();
}
else
{
string result = "";
return result;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (Time)value;
}
}
问题是当我在一个单元格中选择一个值时(感谢相关的组合框),相同的值也会显示在另一个单元格中。 此外,当我向下滚动到数据网格中的另一行时,所选值会消失。 我想知道 DataGridComboBoxColumn 是否运行良好...我使用 .NET 框架 4.6.1。 非常感谢您的帮助。
归根结底,是绑定转换器导致了问题。 感谢@Clemens 的帮助。
仅供参考,我不使用 DateTime 结构,因为我需要一个“无效”时间来允许用户取消其选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.