2014-04-06 63 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。