Я использую эту реализацию ObservableDictionary.
Когда я обновляю значения до определенного ключа, тогда мой словарь обновляется правильно , ноDataGrid, который привязан к Словарю, содержит больше строк.
Мой XAML:
<DataGrid ItemsSource="{Binding GradeNumbers}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Amount" Binding="{Binding Value}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
И моя ViewModel, где я обновляю Словарь.
public ObservableDictionary<double, int> GradeNumbers { get; set; }
private void GetGradeNumbers()
{
foreach (var gradeRating in this.gradeRatings)
{
this.gradeNumbers.Add(gradeRating.Grade, 0);
}
foreach (var grading in this.gradings)
{
this.gradeNumbers[grading.Grade]++;
}
}
Послепри выполнении кода мой вид выглядит как это , но я ожидаю, что он выглядит как это
РЕДАКТИРОВАТЬ
Содержимое GradeRaitings:
public List<GradeRatingDTO> GradeRatings
{
get
{
return this.gradeRatings;
}
set
{
this.gradeRatings = value;
this.OnPropertyChanged(nameof(this.GradeRatings));
}
}
public class GradeRatingDTO
{
/// <summary>
/// Gets or sets the Grade.
/// </summary>
public double Grade { get; set; }
/// <summary>
/// Gets or sets the LowerBoundary of the Grade.
/// </summary>
public double LowerBoundary { get; set; }
/// <summary>
/// Gets or sets the UpperBoundary of the Grade.
/// </summary>
public double UpperBoundary { get; set; }
}
и Оценки:
private List<GradingModel> gradings;
public class GradingModel : ViewModelBase
{
private double grade;
private double totalScore;
/// <summary>
/// Gets or sets the MatriculationNumber.
/// </summary>
public string MatriculationNumber { get; set; }
/// <summary>
/// Gets or sets the PointsPerProblems.
/// </summary>
public ObservableCollection<DoubleItem> PointsPerProblems { get; set; }
/// <summary>
/// Gets or sets the Grade.
/// </summary>
public double Grade
{
get
{
return this.grade;
}
set
{
this.grade = value;
this.OnPropertyChanged(nameof(this.Grade));
}
}
/// <summary>
/// Gets or sets the TotalScore.
/// </summary>
public double TotalScore
{
get
{
return this.totalScore;
}
set
{
this.totalScore = value;
this.OnPropertyChanged(nameof(this.TotalScore));
}
}
РЕДАКТИРОВАТЬ 2
Найдены решение или обходной путь ...
Вместо использования ObservableDictionary я использую список вроде:
public List<GradingNumbers> GradeNumbersList
{
get
{
return this.gradeNumbersList;
}
set
{
this.gradeNumbersList = value;
this.OnPropertyChanged(nameof(this.GradeNumbersList));
}
}
с номерами сортировки, такими как:
public class GradingNumbers
{
public double Grade { get; set; }
public int Amount { get; set; }
}
Добавление значений:
private void GetGradeNumbers()
{
List<GradingNumbers> tmpGradingNumbers = new List<GradingNumbers>();
foreach (var gradeRating in this.gradeRatings)
{
tmpGradingNumbers.Add(new GradingNumbers() { Grade = gradeRating.Grade, Amount = 0 });
}
foreach (var grading in this.gradings)
{
tmpGradingNumbers.First(g => g.Grade == grading.Grade).Amount++;
}
this.GradeNumbersList = tmpGradingNumbers;
}
и XAML:
<DataGrid ItemsSource="{Binding GradeNumbersList}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Amount" Binding="{Binding Amount}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
Я уже использовал этот подход для другого представления, и он работает довольно хорошо, но я думал, что использование ObservableDictionary будет болееГант ...
Мне все еще интересно увидеть решение, которое работает с ObservableDictionary.