DataGridCells не обновляется, когда Multibinding и MultiValueConverter изменяют базовое значениеC#

Место общения программистов C#
Ответить
Anonymous
 DataGridCells не обновляется, когда Multibinding и MultiValueConverter изменяют базовое значение

Сообщение Anonymous »

В настоящее время я работаю над приложением для планирования мощности. Он показывает три таблицы данных:
  • первая сетка предназначена для проектов (отображает запланированные часы на проект и в неделю),
  • вторая сетка предназначена для людей (отображает доступные часы и запланированные часы на человека и в неделю) и
  • третья сетка предназначена для планирования рабочего времени для людей в проектах на ежедневной основе (назовем это планом мощности).
    План мощности показывает одну строку для каждого человека и проекта, показывая запланированное рабочее время каждого дня для этого человека в одной DataGridCell.
Все три DataGrids показывают период в 15 недель. Вверху я показываю переключатель периода для перемещения вперед и назад. Начальной неделей всегда является текущая неделя.
Моя модель представления плана мощности содержит ObservableCollection недельных моделей представления. Неделя ViewModel содержит наблюдаемую коллекцию дневных ViewModel. ViewModel дня содержит ViewModel часа (одно свойство — это запланированные часы в виде строки отображения), свойство Cell Foreground, свойство Cell Background и другие.
Если кто-то хочет спланировать проект, он перетаскивает проект (из первой сетки) в планировщик мощности, а затем перетаскивает ячейку «доступные часы на этой неделе» для людей (вторая сетка) (в план мощности и помещает ее в соответствующий проект. Затем приложение вычисляет максимально возможное значение). ежедневные плановые часы для этого работника в проекте (в соответствии с ежедневными часами доступности рабочих).
В моей первой версии, до того, как я реализовал периоды переключения, она работала отлично и мгновенно отображала вновь рассчитанные плановые часы. Но поскольку я реализовал переключение периодов, DataGridCells не обновляются при изменении значений, даже если MultiValueConverter «запускается» и возвращает правильное значение. значения.
Вот мой MultiValueConverter:

Код: Выделить всё

        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length < 3) return -1;
string parameterString = parameter as string;
int weekIndex = 0;
int dayIndex = 0;
int type = 0;
if (!string.IsNullOrEmpty(parameterString))
{
string[] parameters = parameterString.Split(new char[] { '|' });
if (parameters.Length == 3
&& int.TryParse(parameters[0], out weekIndex)
&& int.TryParse(parameters[1], out dayIndex)
&& int.TryParse(parameters[2], out type))
{

if (values[0] is ObservableCollection weekList
&& values[1] is ObservableCollection displayWeekIndexList
&& values[2] is int periodLength)
{
if (weekIndex >= 0 && weekIndex < periodLength)
{
int globalWeekIndex = displayWeekIndexList[weekIndex];
object returnWert = string.Empty;
if (globalWeekIndex < 0 || globalWeekIndex >= weekList.Count) return string.Empty;
if (type == 0)
{
returnWert = weekList[globalWeekIndex].days[dayIndex].CapacityHours.PlanDisplayValue;
}
else if (type == 1)
{
returnWert = weekList[globalWeekIndex].MaPlan!.IsHeaderRow;
}
else if (type == 2)
{
returnWert = weekList[globalWeekIndex].days[dayIndex].BackgroundColor;
}
else if (type == 3)
{
returnWert = weekList[globalWeekIndex].days[dayIndex].ForegroundColor;
}
return returnWert;
}
}

}
}
}
А вот XAML моего DataGridCell: Моя идея переключения периодов на самом деле довольно проста. Я реализовал список индексов массива для недельных коллекций (который может содержать любое количество 15-недельных периодов), содержащий те индексы, которые должны отображаться.
Каждый раз, когда я перемещаюсь на один период вперед, я проверяю, загружен ли уже этот период, иначе он загружается. Итак, допустим, я уже загрузил 3 периода, коллекция недель содержит 45 элементов недели. Если я отображаю первый период, displayWeekIndexList содержит индексы от 0 до 14. Если я отображаю второй период, displayWeekIndexList содержит индексы от 15 до 29. Таким образом, displayWeekIndexList всегда содержит 15 элементов.
Почему мои GridCells не обновляются напрямую при удалении недели доступности человека в плане? Смотрите скриншот. Если я перейду на один период вперед, а затем снова назад, он покажет правильные значения, как я сделал на снимке экрана с уже отображенными значениями для 43-й недели.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/797 ... hange-unde
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»