这可能有助于理解执行树视图和 mvvm 的不同方法。
我也在使用 RadTreeView,最终将事件发送到Items
托管TreeViewItemViewModel
. 当一个动作/事件(例如 Edit)被发送到 MainViewModel 时,我有一个类似的方法:
public void Edited(object sender, RadTreeViewItemEditedEventArgs e)
{
var treeViewItemViewModel = e.NewValue as IEditable;
if (treeViewItemViewModel == null) return;
treeViewItemViewModel.EndEdit();
}
所以这适用于树中的任何级别,也适用于具有不同的行为,检查不同事物的接口是否已实现。
RadTreeView 的 xml
<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)]"/>