<i:Interaction.Triggers>
<i:EventTrigger EventName ="LoadOnDemand">
<invoke:InvokeDelegateCommandAction Command="{Binding LoadOnDemandCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Edited">
<invoke:InvokeDelegateCommandAction Command="{Binding RadTreeViewEditedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<telerik:RadContextMenu x:Name="radContextMenu">
<i:Interaction.Triggers>
<i:EventTrigger EventName = "Opened">
<i:InvokeCommandAction Command = "{Binding NodeMenuOpenCommand}" CommandParameter="{Binding ElementName=radContextMenu}" />
</i:EventTrigger >
</i:Interaction.Triggers>
以上两种触发方式在viewmodel中使用,第一种回传的是页面触发的事件。
private ICommand _LoadOnDemandCommand;
public ICommand LoadOnDemandCommand
{
get
{
if (this._LoadOnDemandCommand == null)
this._LoadOnDemandCommand = new RelayCommand<RadRoutedEventArgs>(e =>
{
globelRadTreeViewItem=e.OriginalSource as RadTreeViewItem;
GetChildrenMetrics2(globelRadTreeViewItem.Tag as MetricNode);
});
return this._LoadOnDemandCommand;
}
}
private ICommand _NodeMenuOpenCommand;
public ICommand NodeMenuOpenCommand
{
get
{
if (this._NodeMenuOpenCommand == null)
this._NodeMenuOpenCommand = new RelayCommand<object>(p =>
{
var radMenu = p as RadContextMenu;
RadTreeViewItem treeViewItem = radMenu.GetClickedElement<RadTreeViewItem>();
if (null!=treeViewItem)
{
_rightClickItem = treeViewItem;
//_rightClickNode = treeViewItem.Tag as MetricNode;
//string _rightClickNodeId = _rightClickNode.NodeId.ToString();
foreach (var item in radMenu.Items)
{
((RadMenuItem)item).IsEnabled = true;
((RadMenuItem)item).Visibility = Visibility.Visible;
}
}
else
{
foreach (var item in radMenu.Items)
{
((RadMenuItem)item).IsEnabled = false;
((RadMenuItem)item).Visibility = Visibility.Collapsed;
}
}
});
return this._NodeMenuOpenCommand;
}
}