如何在视图模型的属性上更新子窗口?

时间:2016-05-26 02:28:03

标签: c# wpf mvvm

我现在正在学习wpf,但编码时出现问题。播放数据来自MainWindow,并显示玩家的ID,名称....但我需要更新玩家的信息。 SubWindowViewModel方面,我有更新绑定属性,但是有问题,我无法在视图端更新属性。我想在viewModel的属性发生变化时更新SubWindow。

public SubWindow(Player player)
    {
        InitializeComponent();
        ISubWindowViewModel subWindowViewModel = new SubWindowViewModel();
        #region Get data
        subWindowViewModel.ID = player.ID;
        subWindowViewModel.Name = player.Name;
        subWindowViewModel.Sex = player.Sex;
        #endregion
        this.DataContext = subWindowViewModel;
    }

并且视图模型在xaml.cs中实现了INotifyPropertyChanged:

<TextBox x:Name="Name" Text="{Binding UserName,Mode=TwoWay}"/>
    <TextBox x:Name="Sex" Text="{Binding Sex,Mode=TwoWay}" />
    <TextBox x:Name="ID" Text="{Binding ID,Mode=TwoWay}"/>

非常感谢!

1 个答案:

答案 0 :(得分:2)

我也不是专业编码员。

我认为你必须在 viewmodel 类中实现一个名为 INotifyPropertyChanged 的界面。

  

查看链接。可能会有更多的链接。

How to: Implement Property Change Notification

INotifyPropertyChanged Interface in WPF with Example

学习并实施它。希望能帮助到你。谢谢。

修改 我假设您的viewModelClass名称为 PersonViewModel 。所以你的viewmodel类会是......如下。

class PersonViewModel:INotifyPropertyChanged
{
    private string _username;

    public string UserName
    {
        get { return _username; }
        set { 
            _username= value; 
            OnPropertyChanged("UserName");
        } 
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string Property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(Property));
        }
    }
}

你的xaml是对的。所以现在我假设你已经传递了你在MainWindow中使用的相同的 viewmodelclass 对象(在构造函数中)。所以在后面的代码中你必须像上面那样设置窗口的DataContext。

public SubWindow(PlayerViewModel player)
{
     InitializeComponent();
     this.DataContext=player;
}