我正在关注针对7.1的WP7 Mango RC上的ListBox上的自动滚动行为的this示例。
在我的Xaml中:
<ListBox x:Name="StatusMessages"
Height="100"
ItemsSource="{Binding StatusMessages, Mode=TwoWay}"
DisplayMemberPath="Message"
Grid.Row="3">
<i:Interaction.Behaviors>
<behaviors:ListBoxItemAutoScrollBehavior FoundItem="{Binding FoundItem}" />
</i:Interaction.Behaviors>
</ListBox>
行为:
public class ListBoxItemAutoScrollBehavior : Behavior<ListBox>
{
public object FoundItem
{
get { return GetValue(FoundItemProperty); }
set { SetValue(FoundItemProperty, value); }
}
public static readonly DependencyProperty FoundItemProperty = DependencyProperty.Register("FoundItem", typeof (object), typeof (ListBoxItemAutoScrollBehavior), new PropertyMetadata(FoundItemChanged));
private static void FoundItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((ListBoxItemAutoScrollBehavior) d).AssociatedObject.ScrollIntoView(e.NewValue);
}
}
我在FoundItemChanged方法中设置了一个断点,当我在ViewModel中设置FoundItem并激活NotifyProperyChanged时,它会看到它被击中。只是,它不起作用,任何想法为什么或我可能做错了什么?
感谢。
更新:行为中的OnAttached和OnDetaching会遇到断点。
更新 2:这适用于常规的Silveright 4应用程序。
更新 3:使用System.Windows.Interactivity版本3.8.5.0修复它。
答案 0 :(得分:2)
你的目标是7.1 /芒果吗?绑定到DependencyObjects,而不是FrameworkElements,是一个Silverlight 4功能,因此在7.0(使用SL 3)中不可用。
有一种解决方法,Prism和MVVM Light用于绑定到SL中的DO 3.查看其来源以获取详细信息。
编辑:您的问题是您的PropertyMetadata构造函数参数。通过不指定2个参数(或者,具体而言,传递方法而不是PropertyChangedCallback实例),编译器可能正在解析default value构造函数重载。
简而言之,请将其更改为:
new PropertyMetadata(null, FoundItemChanged)
或者:
new PropertyMetadata(new PropertyChangedCallback(FoundItemChanged))
答案 1 :(得分:0)
使用System.Windows.Interactivity版本3.8.5.0解决了这个问题。
这篇帖子给了我一个提示:http://caliburnmicro.codeplex.com/discussions/271092