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)]"/>