Dependencyproperty在加载时没有值

时间:2010-05-31 13:52:20

标签: c# silverlight dependency-properties

我的问题是,我有一个名为UC的配置文件,其中包含另一个名为FollowImageControl的UC。

在我的Profile.xaml中,我声明性地将一个名为FollowerId的FollowImageControl属性绑定到Profile.xaml.cs中的CurrentUserId。问题是我在Profile.xaml.cs中分配了CurrentUserId; Profile.xaml代码隐藏。

这意味着我最初没有得到FollowerId。我在 FollowImageControl.xaml.cs

中有这些方法
    public static readonly DependencyProperty _followUserId =
                    DependencyProperty.Register("FollowUserId", typeof(Guid), typeof(FollowImageControl), null);
    public Guid FollowUserId
    {
        get { return (Guid)GetValue(_followUserId); }
        set { SetValue(_followUserId, value); }
    }
    public FollowImageControl()
    {
        // Required to initialize variables
        InitializeComponent();
        LoggedInUserId = WebContext.Current.User.UserId;
        var ctx = new NotesDomainContext();
        if (ctx.IsFollowingUser(LoggedInUserId, FollowUserId).Value) SwitchToDelete.Begin();
    }


    private void AddImg_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (LoggedInUserId != FollowUserId)
        {
            var ctx = new NotesDomainContext();
            ctx.FollowUser(FollowUserId, LoggedInUserId);
            ctx.SubmitChanges();
        }
    }

WEIRD THING 当我插入断点时,FollowImageControl()中的FollowerUserId为0,但它在AddImg_MouseLeftButtonDown中有一个值,并且没有设置其值的中间逻辑。这是怎么回事?

这里有更多代码信息:

这是我对 profile.xaml

的约束
<internalCtrl:FollowImageControl FollowUserId="{Binding ElementName=ProfileCtrl, Path=CurrentUserId}" />

这是我在 profile.xaml.cs 中的构造函数,其中设置了CurrentUserId public static readonly DependencyProperty _CurrentUserId =

DependencyProperty.Register("CurrentUserId", typeof(Guid), typeof(Profile), null);
        public Guid CurrentUserId 
        {
            get { return (Guid)GetValue(_CurrentUserId); }
            set { SetValue(_CurrentUserId, value); }
        }

public Profile(Guid UserId) {
            CurrentUserId = UserId;
            InitializeComponent();
            Loaded += new RoutedEventHandler(Profile_Loaded);
        }

我非常沮丧地说,一分钟后,FollowerId没有任何价值,而下一个它是正确的,没有我改变了代码隐藏的价值。

1 个答案:

答案 0 :(得分:0)

您在FollowImageControl构造函数中设置了断点的位置?如果您在调用InitializeComponent()之前设置了它,则这是正常行为,因为InitializeComponent()执行所有XAML。这意味着,您的绑定也是在此方法中创建的,因此在调用InitializeComponent()之后应该有一个值,而不是之前。当然,在构造函数完成后调用AddImg_MouseLeftButtonDown,因此也调用了InitializeComponent()