我现在正在学习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}"/>
非常感谢!
答案 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;
}