2014-12-06 88 views
0

我正在为用户设计一个配置文件页面,供用户编辑他们的个人信息。我正在使用一个PersonViewModel(其中包含当前登录的人)来显示有关用户的当前信息。编辑用户信息的字段绑定到验证模型。按下“执行更改”按钮并获得服务器响应(HTTPStatusCode Ok +更改后的用户对象)后,根据更改更改现有对象的字段。然后我使用setter注入来更新我的PersonViewModel ...在调试时,我可以看到我的对象都是最新的,但是我的视图仍然显示旧信息...我在做什么错了?`Windows Phone 8.1 RT视图不更新(MVVM)

这是得到时候我按下按钮来执行我的变化执行的代码:

private async void ChangeInfoButton(object sender, RoutedEventArgs e) 
    { 
     User user; 
     List<ErrorInfo> errors; 
     if (_profileInformationValidationModel.TryGetUser(out user, out errors)) 
     { 
      var response = await Session.Instance.DataProvider.UpdaterUserInfo(user); 

      if (response.IsSuccess) 
      { 
       /*SignedInUserInfo = AlteredUserInfo*/ 
       Session.Instance.User.Information = user.Information; 
       _personViewModel.SetPerson(user.Information); 
       var d1 = new MessageDialog("Uw gegevens werden succesvol gewijzigd."); 
       d1.ShowAsync(); 

       AnnulInfoButton(sender, e); 
      } 

` 这是PersonViewModel:

public class PersonViewModel 
{ 
    private Person _person; 

    public void SetPerson(Person p) 
    { 
     _person = p; 
    } 

    public PersonViewModel(Person person) 
    { 
     _person = person; 
    } 

    public string Street 
    { 
     get { return _person.Street; } 
    } 

    public string HouseNumber 
    { 
     get { return _person.HouseNumber; } 
    } 

    public string Bus 
    { 
     get { return _person.Bus; } 
    } 

    public string Email 
    { 
     get { return _person.Email; } 
    } 
+0

你的MVVM模式不正确。你的模型和你的模型之间确实没什么区别。发布你的xaml绑定。 – 2014-12-06 23:48:44

回答

0

您的视图模型应该实现INotifyPropertyChanged接口。

研究使用像MVVM Light这样的框架,它为你做了大部分工作。

您可以使用NuGet将其添加到您的项目中。

这是你的模型和视图模型应该是什么样子:

public class Person 
{ 

    public string Street { get; set; } 

    public string HouseNumber { get; set; } 

    public string Bus { get; set; } 

    public string Email { get; set; } 
} 

public class PersonViewModel : System.ComponentModel.INotifyPropertyChanged 
{ 
    private Person _person; 

    public void SetPerson(Person person) 
    { 
     _person = person; 
     Street = person.Street; 
     HouseNumber = person.HouseNumber; 
     Bus = person.Bus; 
     Email = person.Email; 
    } 

    public PersonViewModel(Person person) 
    { 
     SetPerson(person); 
    } 

    #region Street (INotifyPropertyChanged Property) 
    private string _street; 

    public string Street 
    { 
     get { return _street; } 
     set 
     { 
      if (_street != value) 
      { 
       _street = value; 
       RaisePropertyChanged("Street"); 
      } 
     } 
    } 
    #endregion 


    #region HouseNumber (INotifyPropertyChanged Property) 
    private string _houseNumber; 

    public string HouseNumber 
    { 
     get { return _houseNumber; } 
     set 
     { 
      if (_houseNumber != value) 
      { 
       _houseNumber = value; 
       RaisePropertyChanged("HouseNumber"); 
      } 
     } 
    } 
    #endregion 

    #region Bus (INotifyPropertyChanged Property) 
    private string _bus; 

    public string Bus 
    { 
     get { return _bus; } 
     set 
     { 
      if (_bus != value) 
      { 
       _bus = value; 
       RaisePropertyChanged("Bus"); 
      } 
     } 
    } 
    #endregion 


    #region Email (INotifyPropertyChanged Property) 
    private string _email; 

    public string Email 
    { 
     get { return _email; } 
     set 
     { 
      if (_email != value) 
      { 
       _email = value; 
       RaisePropertyChanged("Email"); 
      } 
     } 
    } 
    #endregion 


    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string p) 
    { 
     var propertyChanged = PropertyChanged; 
     if (propertyChanged != null) 
     { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(p)); 
     } 
    } 


} 
+0

我的人物对象已经实现了这个接口。只是为了确保我实现了viewmodel,但它没有什么区别。你确定我已经正确实现了我的viewmodel吗? – Joram 2014-12-06 22:08:32

+0

你的视图模型应该实现它,而不是你的模型。此外,其中的属性应该引发PropertyChanged事件。 – Murven 2014-12-07 01:41:00

+0

我已经改变了它,它没有任何区别。我试图使用setter注入来更新用户对象,但这也没有解决。其他想法? – Joram 2014-12-07 14:45:26

相关问题