So habe ich den folgenden Code, um unser Inventar zu überprüfen. Beim Bearbeiten der Zelle actual_quantity
auf dem DataGrid wird die ItemAuditInstance
-Instanz automatisch aktualisiert und setzt ihre actual_quantity
sowie die Berechnung für ihre difference
. Mein Problem ist das Datagrid automatisch die Zelle für actual_quantity
erfrischt aber nicht difference
So aktualisieren Sie bestimmte DataGrid-Spalte-Cell-Wert ohne die gesamte Tabelle zu aktualisieren
Ich weiß, dass Sie eine Aktualisierung erzwingen können durch die Itemssource des Datagrid Einstellung dann zurück in die Liste auf null, aber es scheint wie eine Verschwendung von Ressourcen, da ich nicht tun möchte Hunderte von Zeilen für nur einen Wert aktualisieren. Gibt es einen Weg, dies zu tun?
ItemAuditInstance:
public class ItemAuditInstance : ReflectionObject {
public int id { get; set; }
public int bfk_item_audit_id { get; set; }
public string item { get; set; }
public int current_quantity { get; set; }
public int actual_quantity { get; set; }
public int difference { get; set; }
public int ds_actual_quantity {
get {
return actual_quantity;
}
set {
actual_quantity = value;
difference = current_quantity - actual_quantity;
}
}
XAML:
<DataGrid x:Name="dgItems" Margin="0,0,0,50" AutoGenerateColumns="False" HorizontalContentAlignment="Right" RowEditEnding="dgItems_RowEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding item}" Header="Item" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding current_quantity}" Header="Current Quantity" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding ds_actual_quantity, UpdateSourceTrigger=PropertyChanged}" Header="Actual Quantity" IsReadOnly="False"/>
<DataGridTextColumn Binding="{Binding difference}" Header="Difference" IsReadOnly="True" Width="*"/>
</DataGrid.Columns>
</DataGrid>
Hallo, danke dafür! Ich entschuldige mich, ich glaube nicht, dass ich mein Problem gut erklärt habe. Es ist nicht so, dass "Unterschied" nicht aktualisiert wird - es ist. Es ist, dass die Zelle auf dem DataGrid, die "Unterschied" darstellt, nicht auffrischt. I.e. Wenn die Differenz 25 wird, zeigt die Zelle immer noch 0 an. – Dilisqq
Der "UpdateSourceTrigger = PropertyChanged" ist verantwortlich für die Meldung an die Zelle, Updates zu überwachen. Standardmäßig ist UpdateSourceTrigger auf "OneTime" eingestellt, das den Wert nur in einem Fall liest - wenn die ItemsSource geändert wird (die gesamte Auflistung) Mit PropertyChanged wartet die Bindung auf das Signal, dass die Eigenschaft geändert wurde - sie wird durch gegeben Die INotifyPropertyChanged-Schnittstelle, wie in meiner Antwort (mit der OnProperyChanged-Methode) gezeigt - Ich habe Ihnen die Möglichkeit gezeigt, Ihr Datagrid zu benachrichtigen, dass eine Änderung stattgefunden hat, und es sollte seine Werte aktualisieren. Hoffe, es ist jetzt einfacher zu verstehen – Rachey
Warte, ich bin dumm, tut mir leid. Ich wusste nicht, dass ich "INotifyPropertyChanged" in "ItemAuditInstance" erben musste. Sobald ich das getan habe, hat dein Code funktioniert. Ich danke dir sehr! – Dilisqq