类型委托的DependencyProperty

时间:2010-09-08 15:17:41

标签: wpf dependency-properties attached-properties attachedbehaviors

我创建了一个附加行为,用于在调用行为时执行类型Func<bool>的委托。以下是依赖属性定义。

public static readonly DependencyProperty SendToDetailBehaviorProperty = DependencyProperty.RegisterAttached("SendToDetailBehavior", typeof(Func<bool>), typeof(ListDetailAspectSendToDetailBehavior), new UIPropertyMetadata(null, SendToDetail));

我按预期工作,但是在我的XAML中,我收到以下错误,导致无法加载设计器。

  

属性'SendToDetailBehavior'是   找不到或不可序列化   输入'SortableListView'

您将在下面找到xaml。

<Controls:SortableListView Grid.Row="0"
                                                       Grid.Column="0"
                                                       Name="lvwLocations"
                                                       MinHeight="150"
                                                       MinWidth="{Binding Path=BusinessObject.Locations, ValidatesOnDataErrors=true, Converter={StaticResource AlwaysReturn1Converter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
                                                       Style="{DynamicResource SortableListViewStyle}"
                                                       ScrollViewer.VerticalScrollBarVisibility="Auto"
                                                       ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                                       IsSynchronizedWithCurrentItem="True"
                                                       **behaviors:ListDetailAspectSendToDetailBehavior.SendToDetailBehavior="{Binding Path=LocationListDetail.SendFocusToDetail}"**
                                                       ItemsSource="{Binding Path=LocationListDetail.MasterList}"
                                                       SelectedItem="{Binding Path=LocationListDetail.DetailItem, Mode=TwoWay}"
                                                       MouseDoubleClick="lvwLocations_MouseDoubleClick">

例如,如果我将Dependancy属性的基础类型更改为bool,则错误消失。

正如我所说的附加行为正在起作用,只有设计师才会爆炸。我已经找到了关于这方面的文档并且空洞了。我希望有人在这里有一些见解。

谢谢, BDN

2 个答案:

答案 0 :(得分:4)

而不是使用委托,将您的依赖项属性类型更改为Command(我使用DelegateCommand),它将委托包装在其中。我遇到了与你相同的问题,但是通过这种方法解决了这个问题。

答案 1 :(得分:0)

这是在VS 2008,2010还是Expression Blend中发生的? VS2008的设计师非常脆弱。至于修复它,您是否尝试过使用非泛型委托类型?像这样:

public delegate bool SendToDetail();

然后您的VM将公开该委托类型的属性,而不是Func<bool>