Невозможно привязать свойство textblock из другого класса к классу пользовательского интерфейса с помощью MVVM. - PullRequest
0 голосов
/ 17 июля 2011

Я спросил, не может привязать свойство textblock из другого класса к классу пользовательского интерфейса, используя MVVM в предыдущем посте. Невозможно связать свойство textblock из другого класса с классом пользовательского интерфейса, используя MVVM

Я все еще не могу связать свойство textblock, но я обнаружил, что событие PropertyChanged становится пустым, когда я не могу связать свойство textblock.

Пожалуйста, см. Ниже код (также см. Предыдущий пост):

public class Authentication : ViewModelBase
{
    private string _ErrorStatus;
    public string ErrorStatus
    {
        get
        {
            return _ErrorStatus;
        }
        set
        {
            _ErrorStatus = value;
            NotifyPropertyChanged("ErrorStatus");
        }
    }

    void Authenticate()
    {
        //The bellow code doesn't work.
        ErrorStatus = "Access Denied.";
    }
}

В приведенном ниже коде PropertyChanged становится пустым.

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        //PropertyChanged is null, so event is not called and ErrorStatus is not changed.
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

Пожалуйста, дайте мне знатькак написать правильный код и почему PropertyChanged становится нулевым.

Я уже подтвердил, что ErrorStatus изменяется правильно, когда ErrorStatus вызывается в классе пользовательского интерфейса (MainPage.cs).

1 Ответ

0 голосов
/ 17 июля 2011

Я не знаю, решает ли это вашу проблему или нет, но:

то, как вы запускаете событие, не является потокобезопасным. Не только здесь, но и всегда запускайте ваши мероприятия так:

protected void NotifyPropertyChanged(String info)
{
    var handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(info));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...