使用来自不同类的表单更改类中的属性

时间:2014-09-13 17:49:41

标签: c# .net data-binding inotifypropertychanged

我在类中有许多属性可以创建一个pdf文档,需要在创建pdf之前设置它。该类名为generatePDF。我希望能够使用表单更改属性并保留属性。

INotifyPropertyChanged在generatePDF类中实现。我使用数据源配置向导(屏幕最右侧的Open DataSources垂直选项卡,单击左上角的图标添加数据源)来绑定GeneratePDF类。现在,在Datasources窗口中,我可以看到所有属性,并可以轻松地将它们拖到配置表单上。

我在generatePDF类中有一个方法,它将初始值放入属性中。我在显示配置表单之前运行了这个方法。

当显示配置表单时,我希望用初始值填充的文本框是空白的。当我输入一个值应该更改我的GeneratePDF实例中的属性时,该属性不会更改。此外,还有一个控件自动添加到配置表单中,显然允许用户单步执行GeneratePDF类的不同实例 - 就像数据库表中的行一样。配置表单似乎没有绑定到GeneratePDF类的单个实例。

我尝试更改GeneratePDF以及to static的所有属性和方法,但是当它完成并且显示错误“...无法在静态类上实现INotifyPropertyChanged ...”时显示。

我猜我不是第一个遇到这个问题的人,但是我无法清楚地陈述我的问题,以便谷歌搜索找到答案或教程。

我很感激帮助将类的特定实例绑定到配置表单。

1 个答案:

答案 0 :(得分:0)

好的,我一整天都在努力,我想我找到了解决方案。

当我添加项目数据源GeneratePDF时,微软称之为什么? 'GeneratePDFBindingSource'已添加到项目中。我继续将这个类中的所有属性都打包到配置表单上。

我将配置表单的构造函数修改为GeneratePDF的实例作为参数。

构造函数也被修改。在Initialize Component运行之后,配置表单绑定源只是一个'typeOf'GeneratePDF。 GeneratePDFBindingSource的DataSource属性已更新为指向我刚刚传入的实例。

但是,当显示表单时,值STILL显示空白。我查看了系统生成的配置代码,并注意到有一个EndEdit()方法可以在更改完成时调用。将它添加到构造函数中并且......它可以工作!

以下是几行简单的完成代码。我发布这个答案,以防其他人发生在这个问题上,或者如果我在将来的某个时间忘记如何做到这一点并需要参考。

namespace com.myCompany.myApp
{
    public partial class frm_Configuration : Form
    {
        public frm_Configuration(GeneratePDF generatePdf)
        {
            InitializeComponent();
            GeneratePDFBindingSource.DataSource = generatePdf;
            GeneratePDFBindingSource.EndEdit();
        }
    }
}