在 WPF 中使用依赖属性

发布于 2024-09-28 02:46:58 字数 320 浏览 2 评论 0原文

我有一个从托管包装器公开的只读 .NET 属性,该包装器获取数据库的名称,假设属性名称是 DBNameDBName 可能会有所不同,具体取决于连接到 WPF 应用程序的数据库。此属性 getter 和 setter 也驻留在托管 .NET 包装器内。我在我的 WPF 项目中使用 this(DBName) 属性。

我想在此(DBName).NET 属性上创建一个依赖属性,每当此 DBName 更改时都会收到通知。我想在 WPF 应用程序的状态栏上显示 DBName

我可以这样做吗?

I have a readonly .NET property exposed from a managed wrapper which gets the name of the database, let's say the property name is DBName. The DBName may vary depending upon the database connected to the WPF application. This property getter and setter also resides inside the managed .NET wrapper. I am using this(DBName) property in my WPF project.

I want to create a dependency property over this(DBName) .NET property which will be notified whenever this DBName changes. I want to show the DBName on my status bar in the WPF application.

Can I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧街凉风 2024-10-05 02:46:58

是的,

您需要在包装器中实现 INotifyPropertyChanged并在每次更改 DBName 时调用 PropertyChanged("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";
    }
}

以这种方式使用代码意味着每次更新 DBName 时都会调用该事件。

Yes

You'll need to implement INotifyPropertyChanged in your wrapper and call PropertyChanged("DBName") each time DBName is changed.

Update

I think this issue can be solved by enforcing a simple rule: always set via the property. If you enforce that, then other programmers won't make the mistake of forgetting to call 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";
    }
}

Using the code this way means that the event gets called every time the DBName is updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文