【问题标题】:Binding to UserControl properties from calling page从调用页面绑定到 UserControl 属性
【发布时间】:2012-10-16 16:40:13
【问题描述】:

我创建了一个具有依赖属性的用户控件。我可以很好地设置调用页面中的属性,并且在用户控件中一切正常。但是,当依赖属性值发生变化时,不会通知承载用户控件的页面。

用户控件中的依赖属性为:

public static readonly DependencyProperty SelectedSearchResultProperty = DependencyProperty.Register("SelectedSearchResult", typeof(SearchResult), typeof(QPowerFinder), new PropertyMetadata(null, OnSelectedSearchResultChanged));
public SearchResult SelectedSearchResult
{
    get { return (SearchResult)this.GetValue(SelectedSearchResultProperty); }
    set
    {
        this.SetValue(SelectedSearchResultProperty, value);
        RaisePropertyChanged("SelectedSearchResult");
    }
}
private static void OnSelectedSearchResultChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
    (obj as QPowerFinder).SelectedSearchResult = (SearchResult)args.NewValue;
}

承载用户控件的页面设置为:

<localcont:QPowerFinder Grid.Column="1" SelectedSearchResult="{Binding BoxAccountResult, Mode=TwoWay}"/>

希望的行为是依赖属性注册更改,并通过绑定通知托管页面。然而,事实并非如此。

谢谢!

【问题讨论】:

    标签: .net wpf user-controls dependency-properties


    【解决方案1】:

    DependencyProperty 更像是指向另一个属性的指针

    你可以让它指向你的外部BoxAccountResult 属性,或者你可以让它指向(SearchResult)args.NewValue,但你不能两者都做。

    我认为您要做的是更新OnSelectedSearchResultChanged 方法中的源SelectedSearchResult 属性,而不是将属性设置为新值。

    【讨论】:

    • 一个 DependencyProperty 更像是一个指向另一个属性的指针 你可以让它指向你的外部 BoxAccountResult 属性,或者你可以让它指向 (SearchResult)args.NewValue,但你不能两者都做.我认为您要做的是更新 OnSelectedSearchResultChanged 方法中的源 SelectedSearchResult 属性,而不是将属性设置为新值听起来是对的 - 但我不确定该怎么做?
    • @billp OnSelectedSearchResultChanged 的目的是什么?谁叫这个?你甚至可能根本不需要它。但如果我没记错的话,有一些方法可以获取绑定表达式并使用UpdateSourceUpdateTarget 来更新源属性,但我现在不记得语法了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2023-04-07
    • 2012-10-08
    相关资源
    最近更新 更多