2015-10-14 3 views
1

Я создал Usercontrol с свойством типа «Пользователь», который содержит свойства, которые я хотел бы привязать к элементам управления. Внутри Usercontrol.Связывание внутри Usercontrol XAML

После записи в блоге (http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html) мне удалось выполнить привязку, но когда я обновляю свойство «Пользователь» Внутри модели представления страницы, включая мой Usercontrol, поля не обновляются.

Вот мой код: Usercontrol.xaml.cs

public sealed partial class WebTeamUserControl : UserControl 
{ 


    public WebTeamUserControl() 
    { 
     this.InitializeComponent(); 
     (this.Content as FrameworkElement).DataContext = this; 
    } 

    public static readonly DependencyProperty UserProperty = 
     DependencyProperty.Register("User", typeof(User), typeof(WebTeamUserControl), new PropertyMetadata(new User())); 

    public User User 
    { 
     get { return (User)GetValue(UserProperty); } 
     set { SetValueDp(UserProperty, value); } 
    } 


    public string Username { get { return User.prenom + " " + User.nom; } } 

    public string Nickname { get { return User.pseudo; } } 

    // Some other fields 

    public event PropertyChangedEventHandler PropertyChanged; 
    void SetValueDp(DependencyProperty property, object value, [System.Runtime.CompilerServices.CallerMemberName] String p = null) 
    { 
     SetValue(property, value); 
     if(PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(p)); 
     } 
    } 

} 

Связывание файла XAML осуществляется с {Binding NameOfTheProperty}

На странице, где я использую этот контроль, я связываю с <controls:WebTeamUserControl User="{Binding User, Mode=TwoWay}" />, а вот DATACONTROL данной страницы:

class ProfileViewModel : ViewModelBase 
{ 
    public User User { get; set; } 

    public ProfileViewModel() 
    { 
     if(_isInDesignMode) 
     { 
      User = new User(); 
     } 
     GetAppUser(); 
    } 

    /// <summary> 
    /// Chargement de l'utilisateur 
    /// </summary> 
    public async void GetAppUser() 
    { 
     // Creating dummy object for design mode 
     if (_isInDesignMode) 
     { 
      User = new User(); 
     } 
     else 
     { 
      //On charge depuis la mémoire locale l'utilisateur 
      try 
      { 
       var roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings; 
       string userNickname = (string)roamingSettings.Values["user_nickname"]; 

       User = await User.LoadUserFromTemporaryStorage(userNickname); 
       RaisePropertyChanged("User"); 
      } 
      catch 
      { 
       //L'utilisateur n'existe pas dans la mémoire locale, on se déconnecte 
       Resources.APIWebTeam.Connection.Disconnect(); 
      } 
     } 

     RaisePropertyChanged("Username"); 
     RaisePropertyChanged("Nickname"); 
     RaisePropertyChanged("Promo"); 
     RaisePropertyChanged("Groupe"); 
     RaisePropertyChanged("DateDeNaissance"); 
    } 
} 

Любая идея, почему это doens't работать?

ответ

2

Поля Имя пользователя и Имя поля не являются зависимыми свойствами. Если вы просто привязываетесь к свойствам объекта User, все должно работать (я только дважды проверил локальный).

<TextBlock Text="{Binding User.Name}" /> 
<TextBlock Text="{Binding User.LastName}" /> 
Смежные вопросы