c# - 如何访问 C# 属性的方法? (特别是如果属性是一个集合并使用 INotifyPropertyChanged 接口(interface))

标签 c# wpf

假设我们有 List 类型的 SomeProperty,我们有 get 和 set 方法

public List<SomeClass> SomeProperty
{
    get
    {
        //return something
    }
    set
    {
        //set something
    }
}

我想知道在调用 SomeProperty 的方法(即 SomeProperty.Add(someObject);)时是否调用了 get 或 set 方法。

我想知道,因为我有一个 wpf 窗口,它有一个列表作为属性(我们称之为 ListProperty),它需要更新另一个显示属性(我们称之为 DisplayProperty) 使用 INotifyPropertyChanged 的​​实现方法。我想知道是否应该将 OnPropertyChanged 事件放在 get 或 set 中

即:

public List<SomeClass> ListProperty
{
    get
    {
        //return something
    }
    set
    {
        OnPropertyChanged("DisplayProperty");
    }
}

或者有没有更好的方案可以达到这个效果?

最佳答案

不,setter 不会被任何修改集合的东西调用。 ObservableCollection 类的存在就是为了这个特定的目的——您可以用它来代替您的列表。您仍应使用 INotifyPropertyChanged 并将其作为具有更改通知的属性,以便在替换整个集合时触发该事件。

编辑,示例:

public ObservableCollection<SomeClass> SomeProperty
{
    get
    {
        return _someProperty;
    }
    set
    {
        if (_someProperty == value) return;
        _someProperty = value;
        OnPropertyChanged("SomeProperty");
    }
}

关于c# - 如何访问 C# 属性的方法? (特别是如果属性是一个集合并使用 INotifyPropertyChanged 接口(interface)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31058354/

相关文章:

c# - Wpf(或 Windows 窗体)的 Dnx

c# - 有没有办法在 C# 中用 winforms 或 WPF 制作 3D 游戏?

wpf - 在 listItem wpf 中将按钮右对齐

c# - 在 GeckoWebBrowser 中检索选定的文本

c# - 保留重复项的两个列表之间的区别

c# - 是否可以在不安装 Visual Studio 的情况下将 Visual Studio 项目部署为 Web 应用程序?

c# - 您可以在 XAML 中引用其他属性中的属性吗?

wpf - 将弹出窗口的宽度绑定(bind)到其他控件的宽度,并带有一些边距

c# - 将数据从 View 模型绑定(bind)到 View

c# - ServiceStack中如何使用IRequiresRequest注入(inject)IRequest?