WPF MVVM数据绑定

时间:2014-04-16 09:16:59

标签: wpf mvvm

我试图实现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>

它仍无法正常工作。

4 个答案:

答案 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();      
        }

给出结果

enter image description here

答案 3 :(得分:0)

你试过这个:

 public FriendsModel(string _initialName)
    {
        this.FirstName = _initialName;
    }

此致