2010-10-19 177 views
1

我有一个只读属性名称是DBName,它是从托管包装获得数据库名称的公开属性。根据连接到WPF应用程序的数据库,DBName可能会有所不同。这个属性getter和setter也驻留在托管的.NET包装器中。我在我的WPF项目中使用此(DBName)属性。使用WPF中的依赖项属性

我想通过这个(DBName).NET属性创建一个依赖属性,只要这个DBName发生变化,这个属性将被通知。我想在WPF应用程序的状态栏上显示DBName

我能做到这一点?

回答

0

您需要实现INotifyPropertyChanged在您的包装,并呼吁PropertyChanged("DBName")每次DBName改变。

更新

我认为这个问题可以通过强制执行一个简单的规则来解决:总是通过属性设置。如果你强制执行该操作,那么其他程序员不会忘记致电PropertyChanged("DBName")

public class DBWrapper : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler Propertychanged; 

    private string dbName; 

    public string DBName 
    { 
     get { return dbName; } 

     private set 
     { 
      dbName = value; 
      if(PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("DBName")); 
      } 
     } 
    } 

    public void SomeMethodThatChangesDBName() 
    { 
     DBName = "SomethingNew"; 
    } 
} 

使用这种方法意味着事件被称为每次数据库名更新时的代码。

+0

有没有其他的解决方法。通常我在我的WPF应用程序中调用Connect(string dbname)方法,该方法调用.NET托管包装的连接方法。我可以在这个方法中完成我的要求,但假设有任何新方法出现,我必须确保程序员调用了属性changed(“DBName”),否则代码可能会中断。 – 2010-10-19 12:26:14

+0

那么,确保这个属性的设置器(可以是私有的)始终引发PropertyChanged事件。并确保更新此属性的唯一方法是通过setter(不要直接更新后台字段)。 – 2010-10-19 13:06:16