WPF 的 DependencyPropertyListener()

DependencyPropertyListener() for WPF

我想运行一个计划在 windows phone 中用于 WPF 的项目。 这是 link : Loading Data when the User Scrolls to the End

通过重复代码,我发现 WPF 不知道此方法中的 DependencyPropertyListener() :

 static void element_Loaded(object sender, RoutedEventArgs e)
{
    FrameworkElement element = (FrameworkElement)sender;
    element.Loaded -= element_Loaded;
    ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(element);
    if (scrollViewer == null)
    {
        throw new InvalidOperationException("ScrollViewer not found.");
    }

    var listener = new DependencyPropertyListener();
    listener.Changed
        += delegate
        {
            bool atBottom = scrollViewer.VerticalOffset
                                >= scrollViewer.ScrollableHeight;

            if (atBottom)
            {
                var atEnd = GetAtEndCommand(element);
                if (atEnd != null)
                {
                    atEnd.Execute(null);
                }                    
            }
        };
    Binding binding = new Binding("VerticalOffset") { Source = scrollViewer };
    listener.Attach(scrollViewer, binding);
}

是否有解决此对象的方法?

您可以使用 DependencyPropertyDescriptor.

监听依赖项 属性 值的变化
static void element_Loaded(object sender, RoutedEventArgs e)
{
    FrameworkElement element = (FrameworkElement)sender;
    element.Loaded -= element_Loaded;
    ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(element);
    if (scrollViewer == null)
    {
        throw new InvalidOperationException("ScrollViewer not found.");
    }

    var dpd = DependencyPropertyDescriptor.FromProperty(ScrollViewer.VerticalOffsetProperty, typeof(ScrollViewer));
    dpd.AddValueChanged(scrollViewer, delegate(object o, EventArgs args)
    {
        bool atBottom = scrollViewer.VerticalOffset
                       >= scrollViewer.ScrollableHeight;
        if (atBottom)
        {
            var atEnd = GetAtEndCommand(element);
            if (atEnd != null)
            {
                atEnd.Execute(null);
            }                   
        }
    });
}