无法使用MVVM将textblock属性从另一个类绑定到UI类

时间:2011-07-17 04:38:15

标签: silverlight windows-phone-7 mvvm

我是sliverlight和MVVM的初学者。 我无法使用MVVM将textblock属性从另一个类绑定到UI类。

我的代码在这里。 请告诉我如何在下面的Authentication.cs中绑定textblock属性。

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 :(得分:0)

您尚未创建Authentication的新实例。将以下行添加到主窗口构造器:

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

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

    this.DataContext = authentication;
}

当您致电Authenticate()时,您可以为ErrorStatus分配一个新值,它应显示在TextBlock

答案 1 :(得分:0)

您在ErrorStatus = "Access Denied";方法

中撰写Authenitcate()

TextBox的Text指向ErrorStatus属性,因此只要它更新TextBox,它也会自动更新。

您唯一需要确定的是,您在TextBox绑定的同一对象上调用Authenticate()

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}" />

答案 2 :(得分:0)

这是委托命令模式(也称为relay命令)使用此模式进入播放http://kharasoft.wordpress.com/2007/10/16/the-delegating-command/的地方,而不是在后面的代码中处理按钮单击,您的viewmodel公开了一个ICommand实例,它只是将事件路由到viewmodel上的方法。现在,authenticate在viewmodel的上下文中运行,并且可以直接更新属性。