【发布时间】:2018-12-06 02:03:14
【问题描述】:
我有两个文本框 Discount(%) 和 Price(€)。 价格是只读。 DataGrid 中的 Row 是通过名为 MyData 的类构建的,并且 Discount 绑定到值 discount, 价格到价格。当我更改 Discount 的百分比值时,它应该计算新价格并将源值 price 更改为新价格。但它不会更新文本框 price。我需要调用什么来触发目标更新?
Xaml:
<DataGridTemplateColumn Header="Discount(%)" Width="0.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="tbDiscount" Text="{Binding Path=discount, Mode=TwoWay}" TextChanged="tbDiscount_TextChanged"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Price (€)" Width="0.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="tbPrice" Text="{Binding Path=price, Mode=TwoWay}" IsReadOnly="True"></TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
C#:
我的数据:
public class MyData
{
public decimal price { set; get; }
public int discount { get; set; }
}
如何将行添加到 DataGrid
dataRow.discount = 0;
dataRow.price = price;
dataGridBasket.Items.Add(dataRow);
我如何尝试更改 TextBox Discount 中 textvalueChanged 上的 price 值:
private void tbDiscount_TextChanged(object sender, TextChangedEventArgs e)
{
var text = sender as TextBox;
text.GetBindingExpression(TextBox.TextProperty).UpdateSource();
foreach(MyData item in dataGridBasket.Items)
{
item.price = item.price - (item.price * (Convert.ToDecimal(item.discount) / 100));
}
}
【问题讨论】:
-
改变价格的逻辑应该在
discountsetter的MyData类中。在那里设置新的price值并在pricesetter 中引发 PropertyChangedEvent -
另外:为什么 tbDiscount_TextChanged 更新所有 dataGridBasket.Items 时仅更改 1 个项目的折扣?
-
@ASh 因为我不知道它是如何工作的。 DataBinding 的新手...我不知道如何获取其他特定的文本框,因此我尝试仅更新每个文本框。还是谢谢你
-
@ASh 这个 setter 方法会是什么样子?
标签: c# wpf xaml data-binding datagrid