2017-11-26 17 views
0

私のRadListViewは、オブジェクトのリストにバインドされています。RadListViewから選択したアイテムを取得する方法は?

<telerikDataControls:RadListView x:Name="ListView" VerticalOptions="FillAndExpand" SelectionMode="Single" ItemTapped="ListView_OnCellTapped">    

そして、ここでは私のイベントメソッドです:私のXAMLは、このようになります

void ListView_OnCellTapped(object sender, EventArgs e) 
{ 
    var obj = ListView.SelectedItem; 
}    

しかし、のSelectedItemは常にnullを返します。 EventArgsから選択したオブジェクトを取得する必要があると思われますが、eに含まれるItemsコレクションがどのように直接アクセスできないかはわかりません。何か案は?

編集1:ここに私のXAMLのです:

<telerikDataControls:RadListView x:Name="ListViewMachines" HeightRequest="357" SelectionMode="Single" ItemTapped="ListViewMachines_OnItemTapped"> 
    <telerikDataControls:RadListView.ItemTemplate> 
     <DataTemplate> 
      <telerikListView:ListViewTemplateCell Tapped="Cell_OnTapped"> 
       <telerikListView:ListViewTemplateCell.View> 

        <Grid VerticalOptions="Center" HorizontalOptions="FillAndExpand" Padding="16, 0, 0, 0"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="30"></RowDefinition> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"></ColumnDefinition> 
          <ColumnDefinition Width="Auto"></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <Grid Row="0" Column="0"> 
          <iconize:IconImage IconSize="25" IconColor="Green" Icon="fa-cogs"></iconize:IconImage> 
         </Grid> 
         <Grid Row="0" Column="1"> 
          <Label Text="{Binding MachineName}" FontSize="Medium" /> 
         </Grid> 
        </Grid> 

       </telerikListView:ListViewTemplateCell.View> 
      </telerikListView:ListViewTemplateCell> 
     </DataTemplate> 
    </telerikDataControls:RadListView.ItemTemplate> 
    <telerikDataControls:RadListView.GroupDescriptors> 
     <telerikListView:PropertyGroupDescriptor PropertyName="FunctionalLocationName"/> 
    </telerikDataControls:RadListView.GroupDescriptors> 
    <telerikDataControls:RadListView.GroupHeaderTemplate> 
     <DataTemplate> 
      <Grid BackgroundColor="#C1C1C1"> 
       <Label Text="{Binding }" TextColor="#303030" FontSize="Large" HorizontalOptions="Center"/> 
      </Grid> 
     </DataTemplate> 
    </telerikDataControls:RadListView.GroupHeaderTemplate> 
</telerikDataControls:RadListView> 

私はItemTappedを追加しようとしたtelerikDataControlsにSelectionChangedました:RadListViewどちらも選択したオブジェクトを返します。

+0

タップされていないリストビューで 'ItemSelected'を使用し、 'e.SelectedItem as Type'がオブジェクトです – Nick

答えて

1

は次のようにGridViewコントロールのSelectedCellsを取得します。

if (this.radGridView1.SelectedCells.Count > 0) 
{ 
    GridViewSelectedCellsCollection selectedCells = this.radGridView1.SelectedCells; 
} 
+0

私はRadGridViewではなくRadListViewを使用しています。私はオリジナルの質問をより詳細に更新しました。 – lepton

1

しかし、のSelectedItemは常にnullを返します。

説明どおり、ItemTappedの代わりにItemSelected="OnSelection"がXAMLに必要な場合があります。

Xamarin.Forms ListView Sample: Interactivityによると、選択したアクションは次のようになります、という

e.SelectedItem 

お知らせ:だから

void OnSelection (object sender, SelectedItemChangedEventArgs e) 
    { 
     if (e.SelectedItem == null) { 
      return; //ItemSelected is called on deselection, which results in SelectedItem being set to null 
     } 
     DisplayAlert ("Item Selected", e.SelectedItem.ToString(), "Ok"); 
     //comment out if you want to keep selections 
     ListView lst = (ListView)sender; 
     lst.SelectedItem = null; 
    } 

、選択した項目は、サンプルコード(link)として入手することができEventArgsではなく、パラメータタイプとしてSelectedItemChangedEventArgsを使用してください。次に、e.SelectedItemを使用して、選択した項目を直接取得することができます。

+0

私はxamlにItemSelected = "OnSelection"属性を入れますか? RadListViewタグの中には、その属性がありません。私のコードは私のOPを参照してください。 – lepton

0

スニペットみんなのおかげで、私はItemTappedイベントを使用してこれを行う方法を見つけることができた。ここでは

private void ListView_OnItemTapped(object sender, ItemTapEventArgs e) 
{ 
    var obj = e.Item as MyObjectType; 
} 
0

は私のXAMLコード

<telerikDataControls:RadListView x:Name="clientView" ItemTapped="OnItemTapped"> 
      <telerikDataControls:RadListView.ItemTemplate> 
       <DataTemplate> 
        <telerikListView:ListViewTemplateCell> 
         <telerikListView:ListViewTemplateCell.View> 
          <Grid> 
           <Label Margin="10" Text="{Binding Client}" /> 
          </Grid> 
         </telerikListView:ListViewTemplateCell.View> 
        </telerikListView:ListViewTemplateCell> 
       </DataTemplate> 
      </telerikDataControls:RadListView.ItemTemplate> 
     </telerikDataControls:RadListView> 

は、取得するためにC#で続いています選択

 async private void OnItemTapped(object sender, ItemTapEventArgs e) 
    { 
     Client selectedClient = e.Item as Client; 

     //open details page 
     var masterdetailpage = Application.Current.MainPage as MasterDetailPage; 
     var clientDetails = new ClientDetails(); //page 
     clientDetails.BindingContext = selectedClient; //passing data 

     await masterdetailpage.Detail.Navigation.PushAsync(clientDetails); 

    } 
関連する問題