获取/设置属性的 C# 和 Silverlight 基本类语法不起作用

标签 c# class properties get set

我有一个非常非常简单的类,我尝试使用 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/

相关文章:

java - 从带参数的类调用类(无法解析符号)

c++ - C++ 中基于枚举值的专用类构造函数

gradle - 如何获取rootProject.name并将其提供给应用程序,测试和分发?

c# - 当我的代码不存在时,我如何让我的代码创建一个 sqlite 数据库?

c# - WriteableBitmap 不能在单独的线程上工作?

python - 创建具有未知数量属性的类实例

javascript - 错误 : Can't bind to 'ngModel' since it isn't a known property of

python - 按名称初始化、设置和获取自定义对象属性的 Pythonic 方法是什么?

c# - 接口(interface)实现与接口(interface)继承 - 定义

c# - 如何在 LINQ 调用中返回文本的前 50 个字符