2014-04-06 61 views
1

我有一個發票程序,用於跟蹤客戶可能想要購買的物品。每次按下「添加項目」按鈕時,QTY單元格都會增加。我正在運行的問題是,該值在後臺升級,但未在單元本身中進行更改。 但是,如果單擊單元格,則值將更新。但我希望它在我點擊「添加項目」按鈕後立即更新。當我點擊這個按鈕時,我能做些什麼來更新單元格信息? 這是代碼我有與按鈕推datagrid中的更新單元wpf

public partial class MainWindow : Window 
} 
private void btnAddItem_Click(object sender, RoutedEventArgs e) 
    { 
     addDataGridRow(invoiceItemID, cbxItems.SelectedItem.ToString(), Convert.ToDouble(txtPrice.Text)); 
    } 

    private void addDataGridRow(int id, string itemName, double itemPrice) 
    { 
     //lstDataItem.Add(new DataItem { sQTY = count.ToString(), sNAME = itemName, sPRICE = itemPrice, sRemove = "Delete Item" }); 
     // Rows = new ObservableCollection<DataItem> { new DataItem() }; 
     for (int i = 0; i < Rows.Count; i++) 
     { 
      if (Rows[i].sNAME == itemName) 
      { 
       Rows[i].sQTY = Rows[i].sQTY + 1; 
       id = Rows[i].id; 
       bSameItem = true; 
      } 
     } 
     if (id == 0) 
     { 
      Rows.Add(new DataItem()); 
     } 
     else if (!bSameItem) 
     { 
      Rows.Add(new DataItem()); 
     } 


     if (!bSameItem) 
     { 
      Rows[id].id = id; 
      Rows[id].sQTY = 1; 
      Rows[id].sNAME = itemName; 
      Rows[id].sPRICE = itemPrice; 
      invoiceItemID++; 
      dgInvoice.ItemsSource = Rows; 

     } 
     bSameItem = false; 
    } 
} 

public class DataItem 
{ 
    public int id { get; set; } 
    public int sQTY { get; set; } 
    public string sNAME { get; set; } 
    public double sPRICE { get; set; } 
} 

我不知道,如果你需要我的XAML工作,但這裏是以防萬一

 <DataGrid x:Name="dgInvoice" HorizontalAlignment="Left" Margin="10,92,0,0" VerticalAlignment="Top" Height="608" Width="488" AutoGenerateColumns="False" ItemsSource="{Binding}" RowHeight="25"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="QTY" Binding="{Binding Path=sQTY}" Width="100"/> 
       <DataGridTextColumn Header="NAME" Binding="{Binding Path=sNAME}" Width="200"/> 
       <DataGridTextColumn Header="PRICE" Binding="{Binding Path=sPRICE}" Width="80"/> 
       <DataGridTemplateColumn Width="100"> 
        <DataGridTemplateColumn.CellEditingTemplate> 
         <DataTemplate> 
          <Button Height="20">Delete Item</Button> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellEditingTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

沒有對WPF許多答覆說我已經看到我什麼時候搜索過這個話題。任何幫助將不勝感激。

回答

-1

我必須這麼做dgInvoices.Items.Refresh();

+1

這不是WPF中的一種方法。 –

+0

至少爲我的目的,它的工作,但你是多個歡迎告訴我如何真正做到這一點 – Doctor06

+0

我已經添加了答案。 –

4

您必須實現INotifyPropertyChanged界面上你DataItem類,以便在其性質的任何改變被反射回來的UI。

public class DataItem : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private int id; 
    public int Id 
    { 
     get { return id; } 
     set 
     { 
     if(id != value) 
     { 
      id= value; 
      OnPropertyChanged("Id"); 
     } 
     } 
    } 

    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name) 
    { 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
    } 
} 

讓其他屬性遵循相同的語法像上面Id,你會看到在屬性值的任何更新將反映回GUI。