因此,我有以下代碼來審計我們的庫存。在編輯DataGrid上的actual_quantity
單元格後,ItemAuditInstance
實例會自動更新,並將其設置爲actual_quantity
以及計算其difference
。我的問題是在DataGrid自動刷新小區actual_quantity
但不difference
如何刷新特定的DataGrid列 - 單元格值而不刷新整個表格
我知道你可以通過設置DataGrid的的ItemsSource爲null,然後返回列表強制刷新,但它似乎是一種資源的浪費,因爲我不只想爲一個值刷新數百行。有沒有辦法做到這一點?
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>
嗨,謝謝!不過,我很抱歉,我不認爲我解釋得很好。這不是'差異'沒有得到更新 - 它是。這就是DataGrid上代表「差異」的單元格不會令人耳目一新。即當差異變爲25時,單元仍然顯示爲0. – Dilisqq
「UpdateSourceTrigger = PropertyChanged」負責告訴單元監視更新。默認情況下,UpdateSourceTrigger設置爲「OneTime」,它只在一種情況下讀取值 - 當ItemsSource被更改時(整個集合) 使用PropertyChanged時,綁定正在等待屬性已更改的信號 - 它由我的答案(通過OnProperyChanged方法)中顯示的INotifyPropertyChanged接口 - 我告訴你的方式來通知你的數據網格發生了變化,它應該更新它的值。希望現在更容易理解 – Rachey
等等,我很蠢,對不起。我沒有意識到我必須在'ItemAuditInstance'中繼承'INotifyPropertyChanged'。一旦我做到了,你的代碼就可以工作。非常感謝! – Dilisqq