无法使用 MVVM 架构将数据绑定到文本框?
Unable to bind data to textbox using MVVM architecture?
我是 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));
}
}
视图模型: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>
您需要将 "myMessage" 变成 属性,并在您的 TextBox
中将其绑定为 MyMessage.TestMessage
,假设您将 MainViewModel
绑定为 [=13] =] 在 Window
.
试试这个:
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
我是 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));
}
}
视图模型: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>
您需要将 "myMessage" 变成 属性,并在您的 TextBox
中将其绑定为 MyMessage.TestMessage
,假设您将 MainViewModel
绑定为 [=13] =] 在 Window
.
试试这个:
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