无法使用MVVM架构将数据绑定到文本框?

时间:2015-01-12 10:18:15

标签: c# wpf xaml mvvm data-binding

我是MVVM和WPF的新手。我曾尝试使用DataContext将数据绑定到文本框。

型号:MyMessage.cs

public class MyMessage : INotifyPropertyChanged
{
    private string testMessage;
    public string TestMessage
    {
        get { return testMessage; }
        set
        {
            testMessage = value;
            OnPropertyChanged("TestName");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

ViewModel:MainViewModel.cs

class MainViewModel
{
    MyMessage myMessage;
    public MainViewModel()
    {
        myMessage = new MyMessage();
        myMessage.TestMessage="Hai";
    }

查看:MainWindow.xaml

<Window x:Class="DemoApp2.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding TestMessage}" VerticalAlignment="Top" Width="120"/>
</Grid>

2 个答案:

答案 0 :(得分:4)

你需要转向&#34; myMessage&#34;进入属性,并将其MyMessage.TestMessage绑定在TextBox中,假设您在MainViewModel中将DataContext绑定为Window

答案 1 :(得分:1)

试试这个:

class MainViewModel
{
    private MyMessage _messageProperty;
    public MyMessage MessageProperty 
    {
            get { return _messageProperty; }
            set { _messageProperty = value; }
    }

    public MainViewModel()
    {
        _messageProperty = new MyMessage();
        _messageProperty.TestMessage="Hai";
    }

OnPropertyChanged事件中的字符串也必须与属性的名称相同,如下所示:

public string TestMessage
{
    get { return testMessage; }
    set
    {
        testMessage = value;
        OnPropertyChanged("TestMessage");
    }
}

在MainWindow.xaml.cs的代码隐藏文件中,将数据上下文设置为ViewModel:

class MainWindow
{
    public MainWindow()
    {
        this.DataContext = new MainViewModel();
    }

在MainWindow.xaml文件中,您必须引用MessageProperty的嵌套属性

<Window x:Class="DemoApp2.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding MessageProperty.TestMessage}" VerticalAlignment="Top" Width="120"/>
</Grid>

让我知道它是否有效以及是否需要更多信息;-) 另外,我建议你制作一个关于MVVM如何工作以及它如何实现的快速入门教程,例如: http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial