在我的窗口中,我有一个简单的数据网格控件,其中包含一个 dateTimePicker 列和一个文本框列。我通过从 dateTimePicker 派生的月年字符串对数据网格中的行进行分组。这是列和分组的xaml.....
<DataGridTemplateColumn Header="Date" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:DateTimePicker IsEnabled="True" Format="Custom" FormatString="M/d/yyyy h:mm" Value="{Binding theDate, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Text" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox TextWrapping="Wrap" AcceptsReturn="True" MaxLines="2" VerticalScrollBarVisibility="Auto" MaxLength="150" Text="{Binding theText, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold" Padding="3"/>
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</DataGrid.GroupStyle>
我有一个非常简单的类,其中包含文本字符串、datetimepicker 日期时间以及我动态创建的月份年份字符串。这是该类的 C# 代码...
public DateTime dueDate { get; set; }
public String task { get; set; }
private String _monthYear;
public String monthYear
{
get { return dueDate.Month.ToString() + " - " + dueDate.Year.ToString(); }
}
这是我对分组的初始化
myCollectionView = CollectionViewSource.GetDefaultView(myObservableCollectionList);
myCollectionView.GroupDescriptions.Add(new PropertyGroupDescription("monthYear"));
MyDataGrid.ItemsSource = myCollectionView;
// In this case, myObservableCollectionList is an observable collection that holds the datagrid
// rows. myCollectionView is an ICollectionView object
除了一个非常烦人的意外行为外,一切都正常工作。我不知道这是否是扩展 WPF 工具包中 DateTimePicker 控件的错误。
每当我更改 DateTimePicker 控件上的月份或年份并单击同一行中的新行或不同列时,我更改日期的行将不会被分组,但将保留在旧的月-年日期组中,直到我把它分类。如果它是一致的,这种行为会很好但是......
如果我要更改 DateTimePicker 控件上的月份或年份,然后通过 Tab 或单击相同的 DateTimePicker 控件(不更改任何内容),然后单击新行,旧行将被分组到一个新的月份 -年份类别。
我不确定,但我觉得这是 DateTimePicker 控件的一个错误,即使您不更改日期,当您通过控件切换时它也会调用某种事件。但是现在我很困惑,想知道是否有人对为什么会发生这种情况有任何见解。
*注意**我已经在使用和不使用 INotifyPropertyChanged 的情况下对此进行了测试,我确实实现了接口,并且在实现和不实现它的情况下都会发生这种行为,我想为了简单起见我会忽略它。
感谢您提供任何帮助!