2016-02-12 38 views
0

我在mvvmcross WP应用程序中使用RadDataBoundListBox。我使用Pivot选项卡,以前我有一个viewmodel适用于所有的透视项目,但现在为所有透视项目创建了子视图模型。由于我使用DataContext属性进行子视图模型绑定,但将问题转到RadContextMenu。当“打开”上下文菜单的事件触发,然后FocusedElement变为空,没有命令工作。RadDataBoundListBox中的上下文菜单的FocusedElement始终为null

tappedItem在此行中始终为空。

RadDataBoundListBoxItem tappedItem = e.FocusedElement as Telerik.Windows.Controls.RadDataBoundListBoxItem;

这是我的代码:

  • test.xaml文件:

<phone:Pivot x:Name="uiPivot" Title="{Binding HeaderTitle}"> 

     <!-- Tab 1 --> 
     <phone:PivotItem x:Name="uiPivotTicketDetails" Header="ticket details" DataContext="{Binding TicketEditVM}"> 
     <!-- Some Code --> 

     </phone:PivotItem> 

     <!-- Tab 2--> 
     <phone:PivotItem x:Name="uiPivotTimeEntry" DataContext="{Binding TicketTimeEntryVM}" > 
      <phone:PivotItem.Header> 
       <StackPanel Orientation="Horizontal"> 

        <telerik:RadImageButton HorizontalAlignment="Center" Margin="0, 20, 0, 0" VerticalAlignment="Center" Command="{Binding CmdTimeEntryAdd}" ButtonShape="Ellipse" RestStateImageSource="/Assets/Images/Add-New.png"/> 

        <TextBlock Text="time entries" />     

       </StackPanel> 

      </phone:PivotItem.Header> 

      <telerik:RadDataBoundListBox x:Name="uiTimeEntryList" ItemsSource="{Binding TicketTimeEntries}" ItemTemplate="{StaticResource TimeEntryItemTemplate}" EmptyContent="There are no time entries to display"> 

       <telerikPrimitives:RadContextMenu.ContextMenu> 
        <telerikPrimitives:RadContextMenu OpenGesture="Hold" Opening="uiTicketTimeEntryMenu_Opening" > 
         <telerikPrimitives:RadContextMenuItem Content="edit" Tap="onTicketTimeEntryEdit_Tap" /> 
         <telerikPrimitives:RadContextMenuItem Content="delete" Tap="onTicketTimeEntryDelete_Tap" /> 
        </telerikPrimitives:RadContextMenu> 
       </telerikPrimitives:RadContextMenu.ContextMenu> 

      </telerik:RadDataBoundListBox> 
     </phone:PivotItem> 

这里是Test.xaml.cs:

public partial class TicketEditHomeView : MvxPhonePage 
{ 
    public TicketEditHomeView() 
    { 
     InitializeComponent(); 

     // Set the Context menu... 

     RadContextMenu.SetFocusedElementType(this.uiTimeEntryList, typeof(RadDataBoundListBox)); 
    } 


    private void uiTicketTimeEntryMenu_Opening(object sender, Telerik.Windows.Controls.ContextMenuOpeningEventArgs e) 
    { 
     try 
     { 
      // This tktTappedItem is getting null 
      RadDataBoundListBoxItem tktTappedItem = e.FocusedElement as Telerik.Windows.Controls.RadDataBoundListBoxItem; 
      if (tktTappedItem != null) 
      { 
       ticketTimeEntryDataContext = tktTappedItem.DataContext; 
      } 


      if (tktTappedItem == null) 
      { 
       e.Cancel = true; 
      } 
     } 
     catch { } 
     finally 
     { 
      if (tktTappedItem != null) 
      { 
       tktTappedItem = null; 
      } 
     } 
    } 

    private void onTicketTimeEntryEdit_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     this.ViewModel.TicketTimeEntryVM.CmdTimeEntrySelected.Execute(ticketTimeEntryDataContext); 
    } 

    private void onTicketTimeEntryDelete_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     this.ViewModel.TicketTimeEntryVM.CmdTimeEntryDeleted.Execute(ticketTimeEntryDataContext); 
    } 

}

回答

0

- 我想出了我错在哪里。在构造函数中设置焦点元素类型时,我使用RadDataBoundListBox而不是RadDataBoundListBoxItem。

下面是正确的代码:

public TicketEditHomeView() 
{ 
    InitializeComponent(); 

    // Set the Context menu... 

    RadContextMenu.SetFocusedElementType(this.uiTimeEntryList, typeof(RadDataBoundListBoxItem)); 
}