Caliburn Micro: Как связать ActivateItem с выбором событий в проводниках

Как видно из проекта SimpleMDI Caliburn Micro, есть некоторые соглашения, которые связывают selectionEvent в tabControls с ActivateItem в Проводнике. Я не вижу упоминаний о том, что это может быть за событие.

Однако, когда у вас есть контроль, который не выполняет эти соглашения, я теряюсь в том, как управлять ими самостоятельно.

У меня есть Telerik RadTreeView, которым я хочу управлять с помощью проводника, чтобы иметь возможность загружать по требованию дочерние узлы (через вызов WCF).

Вот где я нахожусь:

<telerik:RadTreeView x:Name="Items"
                     cal:Message.Attach="[Event Selected] = [ActivateItem($dataContext)]"  />

Передача $dataContext неверна, потому что при прохождении самого проводника $SelectedItem возвращает ноль.

Так что мой довольно простой вопрос - тройной.

1) Если RadTreeView является Selecetor, почему с ним не работает базовое соглашение CM,

2) Какое событие я должен использовать для вызова ActiveItem

3) Что я мог передать.

1 ответ

Решение

Это может помочь понять различные подходы к просмотру дерева и mvvm.

Я также использовал RadTreeView и отправил события в ViewModel, которая Items коллекция TreeViewItemViewModel, Когда действие / событие, например, "Правка", было отправлено в MainViewModel, у меня был такой метод:

 public void Edited(object sender, RadTreeViewItemEditedEventArgs e)
        {
            var treeViewItemViewModel = e.NewValue as IEditable;
            if (treeViewItemViewModel == null) return;

            treeViewItemViewModel.EndEdit();
        }

Так что это работало на любом уровне дерева, а также работало для различного поведения, проверяя, реализован ли интерфейс для разных вещей.

XAML для RadTreeView

 <telerik:RadTreeView x:Name="MyTree"
                                     Grid.Row="1"
                                     Margin="0,20,0,0"
                                     VerticalAlignment="Stretch"
                                     FontSize="16"
                                     FontFamily="{StaticResource MainFontFamily}"
                                     ItemsSource="{Binding Children, Mode=TwoWay}"
                                     ItemTemplate="{StaticResource HierarchicalDataTemplate}"
                                     ItemEditTemplateSelector="{StaticResource ItemEditTemplateSelector}"
                                     ItemEditTemplate="{x:Null}"
                                     IsLoadOnDemandEnabled="True"
                                     IsEditable="True"
                                     IsDragDropEnabled="True"
                                     DropExpandDelay="00:00:01"
                                     telerik:TextSearch.TextPath="ItemId"
                                     PathSeparator="|"
                                     cal:Message.Attach="
                                    [Event LoadOnDemand] = [Action LoadOnDemand($eventArgs)];
                                    [Event PreviewDragStarted] = [Action PreviewDragStarted($source,$eventArgs)];
                                    [Event PreviewDragEnded] = [Action PreviewDragEnded($source,$eventArgs)];
                                    [Event DragEnded] = [Action DragEnded($source,$eventArgs)];
                                    [Event Edited] = [Action Edited($source,$eventArgs)];
                                    [Event EditCanceled] = [Action EditCanceled($source,$eventArgs)]"/>
Другие вопросы по тегам