我有一个非常非常简单的类,我尝试使用 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
.否则,数据绑定(bind)将不会反射(reflect)代码中所做的更改。
要实现此接口(interface),您需要添加此实现。实现此目的的“标准”方法是:
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");
}
}
}
这样做将允许您将数据绑定(bind)到您的“报告”类。您可能还想考虑使用 ObservableCollection<T>
而不是 List<T>
对于您想要与数据绑定(bind)一起使用的任何集合。
关于获取/设置属性的 C# 和 Silverlight 基本类语法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047988/