[英]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.