【问题标题】:Property set for object not called未调用对象的属性集
【发布时间】:2025-12-28 23:50:10
【问题描述】:

对于必须是基本语言问题的一些帮助,但我找不到答案。这是一个 Windows 8 商店应用程序,但可以是任何 C# XAML。我有一个包含两个项目的 clsRecord(如下): 我的问题是 SET 只调用名称。它不会被对象 NumQuestions 调用。我部分理解这是因为调用函数正在使用 GET 获取对对象的引用。解决此问题的正确方法是什么,因此它也称为 SET?感谢您的帮助。

公共类 UserRecord : INotifyPropertyChanged

{
    public UserRecord()
    {
        _NumQuestions = new Collection<int>();
    }
    private string _Name;
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            if (value != _Name)
            {
                _Name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }
    private Collection<int> _NumQuestions;
    public Collection<int> NumQuestions
    {
        get
        {
            return _NumQuestions;
        }
        set  // this never gets called
        {
            if (value != _NumQuestions)
            {
                _NumQuestions = value;
                NotifyPropertyChanged("NumQuestions");
            }
        }
    }
   etc with the notify ...

让另一个类创建上述列表

public class UserRecords : INotifyPropertyChanged
{
    public ObservableCollection<UserRecord> List {  get; set; }
    public UserRecords()
    {
        List = new ObservableCollection<UserRecord>();
    }
    public void ClearCurrentUserScore()
    {
        int i;
        for (i = 0; i < List[CurrentUserIndex].NumQuestions.Count; i++)
        {
            List[CurrentUserIndex].NumQuestions[i] = i; // only GET is called
            List[CurrentUserIndex].Name = "X";  // SET is called as expected
        }
    }

【问题讨论】:

    标签: c# properties get set inotifypropertychanged


    【解决方案1】:

    在第一种情况下,List[CurrentUserIndex].NumQuestions 返回Collection&lt;int&gt; 的实例。这意味着[i] 表达式绑定Collection&lt;int&gt; 而不是UserRecord 类型。因此,set 永远不会被调用,因为该集合实际上出现在Collection&lt;int&gt; 的索引器中。

    您应该使用ObservableCollection&lt;int&gt;,而不是使用Collection&lt;int&gt;。另外删除set方法,只提供get

    private ObservableCollection<int> _NumQuestions;
    public ObservableCollection<int> NumQuestions
    {
        get
        {
            return _NumQuestions;
        }
    }
    

    【讨论】:

    • 嗯。好吧,它似乎可以通过更改为 ObservableCollection 并摆脱 SET 来工作。但是现在我很困惑,如果 NofifyPropertyChanged 永远不会被调用,为什么它会起作用。这不是触发数据绑定更新的原因吗?
    • @KenHutchinson ObservableCollection 本身正在引发 WPF 挂钩的适当事件
    最近更新 更多