如何在c#项目中使用DataGridComboBoxColumn ?



我在c# WPF项目中遇到了一些问题,特别是DataGridComboBoxColumn控件。这是MainWindow的一部分。Xamlfile:

<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>

和相应的"code-behind":

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工作得很好…4.6.1我使用. net框架。非常感谢您的帮助。

在一天结束时,是绑定转换器导致了这个问题。谢谢你@克莱门斯的帮助。

仅供参考,我不使用DateTime结构体,因为我需要一个" invalidate "是时候允许用户取消其选择了。

相关内容

  • 没有找到相关文章

最新更新