簡體   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