Синтаксис C # и Silverlight Basic Class со свойствами Get / Set не работает - PullRequest
1 голос
/ 19 февраля 2011

У меня действительно очень простой класс, и я пытался использовать свойства get / set, но они просто не работают для меня ... Я уверен, что это самая очевидная вещь, которую я смотрю, но япросто не понимаю, почему они не работают.Я проверил код, который использует этот класс и хорошо, что я могу видеть.

В основном коде, если я наберу

Report r = new Report(); 
string str = "Taco";
r.displayName = str; 

Отчет объявлен правильно, и все настроено на пустые строки или новый список или любой другой параметр по умолчанию.Но каждый раз, когда я запускал это, displayName всегда оставалось пустым после того, как код завершил выполнение ...

, поэтому я пытался установить точку остановки в свойстве set класса displayName в set {_displayName = displayName;} и значение всегдапередано в (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; 
    }
}

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

Вы неправильно определяете свои свойства. Это должно быть сделано как:

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");
        }
    }
}

Это позволит вам привязать данные к вашему классу «Отчет». Вы также можете рассмотреть возможность использования ObservableCollection<T> вместо List<T> для любых коллекций, которые вы хотите использовать с привязкой данных.

1 голос
/ 19 февраля 2011

Вам необходимо присвоить значение специальной переменной value в ваших наборах. значение - это то, что будет содержать значение (хе), которое было присвоено вашему свойству при его передаче в набор.

 public string reportPath
    {
        get { return _reportPath; }
        set { _reportPath = value; }
    }
...