未调用对象的属性集

时间:2013-08-08 23:09:44

标签: c# properties get set inotifypropertychanged

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

public class 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
        }
    }

1 个答案:

答案 0 :(得分:2)

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

您应该使用Collection<int>而不是ObservableCollection<int>。另外,删除set方法,仅提供get

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