我有一个发票程序,可以跟踪客户可能想要购买的商品。每次"添加项目"按下按钮,QTY单元格递增。我遇到的问题是该值在后台升级,但在单元格本身中没有被更改。 但是,如果单击单元格,则值将更新。但是我希望它在我点击“#34;添加项目"按钮。单击此按钮,如何更新单元格信息? 这是我使用的按钮推送的代码
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响应并不多。任何帮助将不胜感激。
答案 0 :(得分:5)
您必须在班级DataItem
上实施INotifyPropertyChanged界面,以便其属性的任何更改都会反映在用户界面上。
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上。
答案 1 :(得分:0)
我必须做dgInvoices.Items.Refresh();