变量不保存在对象中

时间:2013-01-08 14:41:39

标签: c# xml oop mvvm

所以我正在从XML读取一个文件,这可以很好地使用Debug-Output。

while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "Note")
    {
        Note n = new Note();

        reader.ReadToFollowing("NoteTitle");
        string s = reader.ReadElementContentAsString();
        n.NoteTitle = s;
        Debug.WriteLine("s " + s);
        Debug.WriteLine("n " + n.NoteTitle);
     }
}

我的问题是

n.NoteTitle = s;

不执行任何操作,因此第二个Debug仅打印“n”而没有其他内容,而第一个调试正确打印"s Notetitle1"

我的问题是什么?

编辑: 对不起,NoteTitle的实现:

private string _noteTitle = string.Empty;
    public string NoteTitle
    {
        get { return this._noteTitle; }
        set { RaisePropertyChanged("NoteTitle"); }
    }

2 个答案:

答案 0 :(得分:3)

查看NoteTitle setter的实现,您忘记设置私有字段的值,即

private string _noteTitle = string.Empty; 

public string NoteTitle 
{ 
    get { return this._noteTitle; } 
    set 
    { 
        this._noteTitle = value; // set the field value
        RaisePropertyChanged("NoteTitle"); 
    } 
}

这可以解释为什么在设置NoteTitle属性时没有保留任何值。

答案 1 :(得分:2)

OP中的序列化似乎让人们失望。我认为问题会更好地表达为:

    Note n = new Note();
    string s = "TEST";
    n.NoteTitle = s;
    Debug.WriteLine("s " + s);
    Debug.WriteLine("n " + n.NoteTitle);

问题变成:为什么第二个WriteLine()显示“n”而不是“n TEST”?

答案是,Note.NoteTitle的setter或getter的实现有一些特殊之处。例如,此实现会产生影响:

public string NoteTitle
{
    get
    {
        return "";
    }

    set
    {
        // Do nothing.
    }
}