繁体   English   中英

带有Get / Set属性的C#和Silverlight基本类语法不起作用

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM