【问题标题】:Binding inside a Usercontrol XAML在用户控件 XAML 中绑定
【发布时间】:2016-01-12 18:15:53
【问题描述】:

我创建了一个用户控件,其属性类型为“用户”,其中包含我想绑定到用户控件内部控件的属性。

在一篇博文 (http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html) 之后,我设法进行了绑定,但是当我在包括我的用户控件在内的页面的视图模型中更新属性“用户”时,字段没有更新。

这是我的代码: 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");
    }
}

知道为什么它不起作用吗?

【问题讨论】:

    标签: c# wpf xaml binding user-controls


    【解决方案1】:

    字段用户名和字段名不是依赖属性。如果您只是绑定到 User 对象上的属性,那么一切都应该正常工作(我刚刚仔细检查了本地)。

    <TextBlock Text="{Binding User.Name}" />
    <TextBlock Text="{Binding User.LastName}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2012-02-27
      • 2011-04-12
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多