我使用datarepeater在屏幕上显示来自业务对象的数据。我正在使用C_中的Windows窗体来完成此任务。数据源在编译时不可用,因此我希望在运行时绑定数据源。
这是简化的场景。我用的是商务舱:
public class Product
{
private double _price;
public double Price
{
get
{
return _price;
}
set
{
_price = value;
}
}
}
我用visualstudio接口创建了一个productdatasource,并将价格绑定到一个标签上。现在我用代码填充了中继器的数据源:
dataRepeater1.DataSource = _productDataAgent.GetProducts();
当我启动我的应用程序时,价格正确地填写在标签上。到现在为止,一直都还不错。
现在我想在产品更新时更新价格标签。visual studio界面帮助我,让我选择一个“数据源更新模式”。所以我选择了“onpropertychanged”。
棘手的部分来了。.NET运行时如何知道price属性是从后端更新的。所以我修改了我的业务类来实现inotifypropertychanged。这样地:
public class Product : INotifyPropertyChanged
{
private double _price;
public double Price
{
get
{
return _price;
}
set
{
_price = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Price"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
问题是这不起作用。当我更新一个产品时,它会重新激活界面中的未更新项。在调试和更改属性时,我看到propertyChanged事件为空,因此没有人在监听。
深入研究这个问题,我在msdn的system.windows.forms.binding constructor页面上发现了以下内容:
名为PropertyNameChanged的事件。
所以我尝试使用(自定义)pricechange事件,但这不起作用。
我在这里做错什么了吗?我不打算使用wpf,所以这在windows窗体中可能有点不同?这是因为我在运行时绑定吗?