WPF-GridView Keine Aktualisierung Auf Beobachtbaren Sammlung Ändern
Ich habe eine Telerik RadGridView Gebundenen ObservableCollection der angegebenen Art.. bei einem Update der Wert einer bestimmten Eigenschaft in dieser Art, die entsprechenden Beobachtbaren Sammlung wird immer aktualisiert, jedoch nicht die RadGridView..
Unten ist der XAML-Code:
<ComboBox Grid.Column="4" Width="100" Margin="4" ItemsSource="{Binding Path=ResultUnits, Mode=OneTime}" SelectedValue="{Binding Path=ResultUnit}"/>
<telerik:RadGridView ItemsSource="{Binding Path=Results, Mode=TwoWay}" FooterRowStyle="{StaticResource GridViewFooterStyle}" Width="{Binding RelativeSource={RelativeSource AncestorType= ScrollViewer}, Path=ActualWidth}" ColumnWidth="*" RowIndicatorVisibility="Collapsed" EditTriggers="None" IsFilteringAllowed="False" AutoGenerateColumns="False" AllowDrop="False" CanUserFreezeColumns="False" CanUserReorderColumns="False" CanUserDeleteRows="False" CanUserInsertRows="False" ShowGroupPanel="False" ShowColumnFooters="True">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Quantity" DataMemberBinding="{Binding Path=Quantity}"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
Unten ist die View-Modell-Code:
public class ViewModel {
private const decimal PoundsToKilograms = 0.45359237M;
private const decimal GramstoPound = 0.00220462262M;
private ObservableCollection<Result> results;
public EnvironmentalSummaryViewModel() {
this.results= new ObservableCollection<Result>();
}
public ObservableCollection<Result> Results{
get {
return this.results;
}
set {
this.results = value;
}
}
public string ResultUnit {
get {
return this.resultUnit;
}
set {
if (this.resultUnit != value) {
this.resultUnit = value;
this.UpdateGridViewValuesOnResultUnitChanged();
}
}
}
private void UpdateGridViewValuesOnResultUnitChanged() {
bool isEnglish = this.resultUnit == this.resultUnits[0];
this.results.ToList().ForEach(result => {
decimal weight = isEnglish ? result.Weight * GramstoPound * 1000 : environmental.Weight * PoundsToKilograms;
result.Weight = Math.Round(weight, 2);
});
((IHaveOnPropertyChangedMethod) this).OnPropertyChanged("Results");
}
}
Objekt Klasse:
public class Result{
public decimal Weight { get; set; }
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedes Element innerhalb des Beobachtbaren Sammlung muss eine Möglichkeit haben, das signal für WPF und damit die Kontrolle, dass es zu aktualisieren, so dass die Menge Wert aktualisiert werden kann. Die Observable-Collection-update auftreten, weil diese Sammlung enthält eingebaute änderungsbenachrichtigung für seine Sammlung, nicht aber die einzelnen Positionen. Wie andere gesagt haben, die INotifyPropertyChanged implementieren, die auf Ergebnis und es sollte funktionieren.
Als Erno sagte Ihr Ergebnis der Klasse muss INotifyPropertyChanged implementieren, und Sie müssen zu nennen
OnPropertyChanged
für dieWeight
Eigenschaft.Auch, der ViewModel sollte auch die INotifyPropertyChanged implementieren, so dass Sie vermeiden können, das casting zu
IHaveOnPropertyChangedMethod
(die Namensgebung ist ziemlich schlecht btw), dass Sie sich in Ihrem code. Ich würde vorschlagen einenViewModelBase : INotifyPropertyChanged
Klasse, die alle Ihre ViewModels Erben aus. Wenn Sie nicht möchten, um selbst einen schreiben es gibt viele MVVM-frameworks gibt, die diese integriert.Wenn das update, dass Sie machen ein update auf das Gewicht-Eigenschaft eines Result-Objekts, dann könnte dies durch die Tatsache verursacht, dass das Ergebnis Klasse ist nicht inmplementing INotifyPropertyChanged.
ICollectionChanged (und damit ObservableCollection auch) nur benachrichtigt, änderungen an der Sammlung (hinzufügen und entfernen von Elementen).