
Выше представлен radgridview в WPF. Например, когда я нажимаю на значение строки 29 и добавляю значение строки 20. Строка 29 будет уменьшена до 28, а строка 20 не обновится до 21. Это проблема, с которой я столкнулся. Поскольку код размещается как событие изменения выбора строки, поэтому, когда я расширяю строку, она обновляется. Но пользователю необходимо мгновенно обновиться.
xaml.cs
///
/// Increase / Decrease the count during change in grid.
///
private void Grid1_SelectionChanged(object sender, SelectionChangeEventArgs e)
{
var gridView = sender as RadGridView;
var sampleViewModel = gridView.DataContext as SampleInformationBase;
var masterViewModel = DataContext as SampleMasterViewModel;
if (masterViewModel != null && sampleViewModel != null)
gridView.ParentRow.Cells[3].Content = sampleViewModel.Count;
}
Те же функции должны выполняться, но обе строки должны обновляться мгновенно. Но выбор GridViewChanged означает, что он будет обновлен во время выбора строки. Но я хочу обновляться при перетаскивании.
StudentMasterViewModelBase
///
/// Handles a that was dragged and dropped onto a
///
///
protected virtual void DropStudent(object pParameter)
{
if (pParameter is DragDropParameter)
{
var ddParameter = (pParameter as DragDropParameter);
var recipientRoute = ddParameter.DropRecipient as RouteInformationBase;
//int receipeRoutecount = recipientRoute.CustomerCount +1;
if (recipientRoute != null)
{
RecipientRoute = recipientRoute.Route;
var draggedItem = ddParameter.DraggedItem as StudentBase;
draggedItem.Route = RecipientRoute;
if (!recipientRoute.RouteStudents.Contains(draggedItem))
recipientRoute.RouteStudents.Add(draggedItem);
}
}
AutoNotifyPropertyChanged();
}
///
/// Handles when a is added or removed from
///
///
///
private void OnRouteStudentsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add && e.NewItems != null)
{
foreach (StudentBase RouteStudent in e.NewItems)
{
// Subscribe to data object's EditEnded event
RouteStudent.EditEnded += OnRouteStudentEdited;
RouteStudent.BeginEdit();
RouteStudent.EndEdit();
}
}
if (e.Action == NotifyCollectionChangedAction.Remove && e.OldItems != null)
{
foreach (StudentBase RouteStudent in e.OldItems)
{
// Unsubscribe from the data object's EditEnded event
RouteStudent.EditEnded -= OnRouteStudentEdited;
}
}
AutoNotifyPropertyChanged();
}
///
/// Handles when a has been edited
///
///
private void OnRouteStudentEdited(object sender)
{
if (sender is StudentBase StudentBase)
{
if (!string.IsNullOrWhiteSpace(StudentBase.Custno) && !string.IsNullOrWhiteSpace(RecipientRoute))
{
UpdateRouteChanges(StudentBase.Custno, RecipientRoute);
OnRouteStudentSaved(sender as StudentBase);
}
}
AutoNotifyPropertyChanged();
}
///
/// Ensures the recently-changed exists in only one
///
/// Recently-changed
private void OnRouteStudentSaved(object sender)
{
var RouteStudent = sender as StudentBase;
if (RouteStudent != null && RouteData.Any())
{
var routeInformationCopy = new ObservableCollection(RouteData);
foreach (RouteInformationBase route in routeInformationCopy)
{
if (route.Route != RouteStudent.Route)
{
var match = route.RouteStudents.Where(x => x.Custno == RouteStudent.Custno).FirstOrDefault();
if (match != null)
{
var routeData = RouteData.Where(x => x.Route == route.Route).FirstOrDefault();
routeData.RouteStudents.Remove(match);
}
}
}
}
AutoNotifyPropertyChanged();
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... unt-in-wpf