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

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

Мой код здесь.Пожалуйста, дайте мне знать, как связать свойство textblock в ниже Authentication.cs.

MainPage.xaml

<TextBlock Height="30" Margin="122,218,0,0" Name="textBlock3" Text="{Binding Path=ErrorStatus, Mode=TwoWay}" VerticalAlignment="Top" HorizontalAlignment="Left" Width="86" />

MainPage.xaml.cs

private Authentication authentication;

// Constructor
public MainPage()
{
    InitializeComponent();
    this.DataContext = authentication;
}

ViewModelBase.cs

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

Authentication.cs

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

    void Authenticate()
    {
        //Here, I write authentication code....
        //After the authentication code, I want to change textBlock property depend on auth status.
        //Please let me know how to write code.
    }
}

Ответы [ 3 ]

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

Вы пишете ErrorStatus = "Access Denied"; по вашему Authenitcate() методу

TextBox's Text указывает на свойство ErrorStatus, поэтому при каждом обновлении TextBox также будет обновляться автоматически.

Единственное, в чем вы должны быть уверены - вы вызываете Authenticate() для того же объекта, с которым связан TextBox.

private Authentication authentication = new Authentication();

public MainPage()
{
    InitializeComponent();

    // New line here
    this.authentication = new Authentication();

    this.DataContext = authentication;
}

void btnAuthenticate_Click(object src, EventArgs e)
{
    authentication.Authenticate();
}

XAML:

<TextBlock Text="{Binding Path=ErrorStatus, Mode=TwoWay}" />
0 голосов
/ 18 июля 2011

Здесь вступает в игру шаблон команды делегата (также называемый реле-командой) http://kharasoft.wordpress.com/2007/10/16/the-delegating-command/ с использованием этого шаблона, вместо обработки нажатия кнопки в вашем коде сзади, ваша модель представления предоставляет экземпляр ICommand, который делает немного больше чем направить события в метод на модели представления. Теперь проверка подлинности выполняется в контексте вашей модели представления и может напрямую обновлять свойство.

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

Вы не создали новый экземпляр Authentication. Добавьте следующую строку в главное окно конструктора:

// Constructor
public MainPage()
{
    InitializeComponent();

    // New line here
    this.authentication = new Authentication();

    this.DataContext = authentication;
}

Когда вы звоните Authenticate(), вы можете просто присвоить новое значение ErrorStatus, и оно должно появиться в TextBlock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...