2011-02-19 23 views
1

我有一個非常非常簡單的類,我試圖使用get/set屬性,但他們只是不適合我...我相信這是我看過的最明顯的事情,但我不明白他們爲什麼不工作。我已經檢查了使用這個類的代碼以及我可以看到的罰款代碼。C#&Silverlight基本類與獲取/設置屬性不起作用

在主代碼,如果我鍵入

Report r = new Report(); 
string str = "Taco"; 
r.displayName = str; 

該報告是好的聲明,一切都設置爲空字符串或一個新的列表或任何參數的默認值是。但每次我跑這個displayName始終保持空白代碼完成執行後...

所以我試着在設置{_displayName = displayName;}類中的displayName設置屬性停止點,並始終傳遞值(displayName)是一個空字符串....即使這個字符串在主代碼中清楚地說明了「Taco」....我不知道但是我確定它在我的臉上。如果你需要更多的代碼,我可以提供它...

Report r = new Report(); 
string str = "Taco"; 
r.setReportDisplayName(str); 

但由於某種原因,上述工作。

public class Report 
{ 
    private string _reportPath = string.Empty; 
    public string reportPath 
    { 
     get { return _reportPath; } 
     set { _reportPath = reportPath; } 
    } 

    private string _displayName = string.Empty; 
    public string displayName 
    { 
     get { return _displayName; } 
     set { _displayName = displayName; } 
    } 

    private List<parameter> _parameters = new List<parameter>(); 
    public List<parameter> parameters 
    { 
     get { return _parameters; } 
     set { _parameters = parameters; } 
    } 

    public Report() { } 
    public Report(string path, string display, List<parameter> param) 
    { 
     _reportPath = path; 
     _displayName = display 
     _parameters = param; 
    } 

    public void setReportDisplayName(string str) 
    { 
     _displayName = str; 
    } 
} 

回答

3

您正在錯誤地定義您的屬性。這項工作應爲:

private string _displayName = string.Empty; 
public string displayName 
{ 
    get { return _displayName; } 
    set { _displayName = value; } 
} 

話雖這麼說,如果你使用這個爲Silverlight,你最有可能將要實施INotifyPropertyChanged。沒有這個,數據綁定將不會反映代碼中所做的更改。

要實現這個接口,你需要添加這個實現。 「標準」的方式來實現,這是通過:

public class Report : INotifyPropertyChanged 
{ 
    // Declare the PropertyChanged event 
    public event PropertyChangedEventHandler PropertyChanged; 

    // Raise the PropertyChanged event 
    protected void NotifyPropertyChanged(string propertyName) 
    { 
     var handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

此時,您需要定義喜歡你的屬性:

private string _displayName = string.Empty; 
public string DisplayName 
{ 
    get { return _displayName; } 
    set 
    { 
     if (_displayName != value) 
     { 
      _displayName = value; 
      NotifyPropertyChanged("DisplayName"); 
     } 
    } 
} 

這樣做可以讓您將數據綁定到你的「報告」類。您可能還想考慮使用ObservableCollection<T>而不是List<T>作爲您想要與數據綁定一起使用的任何集合。

+0

哦,多麼傻。我不斷將這些代碼與我已經寫好的東西以及互聯網上的東西以及現在的代碼進行比較 - 我終於明白什麼是不合適的。謝謝! – 2011-02-19 01:02:29

1

你需要在你的設置要分配特殊變量的價值。 價值是什麼將持有(heh)值分配給您的屬性,因爲它被傳遞到集合中。

public string reportPath 
    { 
     get { return _reportPath; } 
     set { _reportPath = value; } 
    }