我试图实现MVVM模式我只想拥有一个在启动时显示一些初始文本的TextBox。
这是我的看法:(暂不关心按钮和列表框)
<Window x:Class="Friends.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>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Width="150" Text="{Binding Friend}"></TextBox>
<ListBox Grid.Row="1" Width="150"></ListBox>
<Button Grid.Row="2" Content="Previous" Width="150"></Button>
<Button Grid.Row="3" Content="Next" Width="150"></Button>
</Grid>
这是我的模特:
public class FriendsModel : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
RaisePropertyChanged("FirstName");
}
}
public FriendsModel(string _initialName)
{
_firstName = _initialName;
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string _newName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs(_newName));
}
}
}
这是我的viewmodel:
public class FriendsViewModel
{
public FriendsModel Friend { get; set; }
public FriendsViewModel()
{
Friend = new FriendsModel("Paul");
}
}
在我背后的代码中:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new FriendsViewModel();
}
}
我的项目正在构建,没有任何错误,但它没有在我的文本框中显示文本。任何人都可以帮助我吗?
提前致谢
编辑:
我把它改成了
<TextBox Grid.Row="0" Width="150" Text="{Binding Friend.Firstname}"></TextBox>
它仍无法正常工作。
答案 0 :(得分:2)
绑定应该指向FirstName属性。 WPF无法通过他自己弄清楚如何将Friend类转换为字符串。
Text="{Binding Friend.FirstName}"
答案 1 :(得分:1)
绑定中的朋友代表完整对象,你必须指定membre ...
尝试将{Binding Friend}
替换为{Binding Friend.FirstName}
答案 2 :(得分:0)
在调用InitializeComponent()之后正在设置DataContext,这意味着已经设置了绑定,文本框正确绑定到FirstName属性,但是在绑定时它是空的。
如果你希望文件框在属性发生时更新,你需要在InitializeComponent()
之前设置DataContext public MainWindow()
{
DataContext = new FriendsViewModel();
InitializeComponent();
}
给出结果
答案 3 :(得分:0)
你试过这个:
public FriendsModel(string _initialName)
{
this.FirstName = _initialName;
}
此致