DependencyProperty типа делегата - PullRequest
       28

DependencyProperty типа делегата

6 голосов
/ 08 сентября 2010

Я создал прикрепленное поведение, которое используется для выполнения делегата типа 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">

Если я изменю основной тип свойства Dependancybool например, ошибка исчезает.

Как я уже сказал, работает привязанное поведение, взрывается только дизайнер.Я искал документацию по этому вопросу и пришел пустой.Я надеюсь, что у кого-то есть понимание.

Спасибо, BDN

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

Вместо использования делегата измените тип свойства зависимости на Command (я использовал DelegateCommand), который обернет делегат внутри него. У меня была та же проблема, что и у вас, но она была решена этим методом.

0 голосов
/ 09 сентября 2010

Это происходит в VS 2008, 2010 или Expression Blend? Дизайнер VS2008 известен своей хрупкостью. Что касается исправления, пытались ли вы использовать неуниверсальный тип делегата? Примерно так:

public delegate bool SendToDetail();

И тогда ваша виртуальная машина предоставит свойство этого типа делегата вместо Func<bool>.

...