2016-12-07 25 views
0

因此,我有以下代碼來審計我們的庫存。在編輯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> 

回答

1

你應該在ItemAuditInstance類執行INotifyPropertyChanged和小區集中UpdateSourceTrigger到的PropertyChanged綁定(就像你在ds_actual_quantity的結合)對於這樣的行爲。 在您的示例中,實際數量的綁定設置正確,但是,如果沒有INotifyPropertyChanged,它有時可能無法正常工作。 我建議使用支持私有字段,允許

你實現INotifyPropertyChanged的的應該像無聲的變化(有時需要避免無限循環):

public event PropertyChangedEventHandler PropertyChanged; 
public void OnPropertyChanged(PropertyChangedEventArgs e) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, e); 
    } 
} 
private int _difference; 
public int Difference 
{ 
    get 
    { 
     return _difference; 
    } 
    set 
    { 
     _difference = value; 
     OnPropertyChanged(new PropertyChangedEventArgs("Difference")); 
    } 
} 

隨着XAML:

<DataGridTextColumn Binding="{Binding Difference, UpdateSourceTrigger=PropertyChanged}" Header="Difference" IsReadOnly="True" Width="*"/> 

現在只需設置 差異= current_quantity - actual_quantity 並且綁定應自動更新

+0

嗨,謝謝!不過,我很抱歉,我不認爲我解釋得很好。這不是'差異'沒有得到更新 - 它是。這就是DataGrid上代表「差異」的單元格不會令人耳目一新。即當差異變爲25時,單元仍然顯示爲0. – Dilisqq

+0

「UpdateSourceTrigger = PropertyChanged」負責告訴單元監視更新。默認情況下,UpdateSourceTrigger設置爲「OneTime」,它只在一種情況下讀取值 - 當ItemsSource被更改時(整個集合) 使用PropertyChanged時,綁定正在等待屬性已更改的信號 - 它由我的答案(通過OnProperyChanged方法)中顯示的INotifyPropertyChanged接口 - 我告訴你的方式來通知你的數據網格發生了變化,它應該更新它的值。希望現在更容易理解 – Rachey

+0

等等,我很蠢,對不起。我沒有意識到我必須在'ItemAuditInstance'中繼承'INotifyPropertyChanged'。一旦我做到了,你的代碼就可以工作。非常感謝! – Dilisqq

相關問題