[英]C# & Silverlight Basic Class Syntax with Get/Set Properties not working
我有一個非常非常簡單的類,我嘗試使用get / set屬性,但它們對我不起作用......我確信這是我看到的最明顯的事情,但我只是可以'看看他們為什么不工作。 我已經檢查了使用這個類的代碼及其可以看到的罰款。
在主代碼中,如果我輸入
Report r = new Report();
string str = "Taco";
r.displayName = str;
聲明報告正常,一切都設置為空字符串或新列表或參數的默認值。 但每次運行此代碼后,displayName在代碼執行完畢后總是保持空白...
所以我嘗試在set {_displayName = displayName;}的Class displayName set屬性中設置一個停止點,並且總是傳入的值(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;
}
}
您錯誤地定義了屬性。 這應該做到:
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");
}
}
}
這樣做將允許您將數據綁定到“Report”類。 對於要與數據綁定一起使用的任何集合,您可能還需要考慮使用ObservableCollection<T>
而不是List<T>
。
您需要在集合中指定特殊變量值的值 。 value是將傳遞給集合時分配給您的屬性的(heh)值。
public string reportPath
{
get { return _reportPath; }
set { _reportPath = value; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.