2016-12-16 8 views
0

Im пытается получить данные из прокатывается ряд с Event SwipeEnded Но SwipeEnded событие возвращает SelectedItem без данныхПолучить прокатывается идентификатор строки из Syncfusion DataGrid

enter image description here

XAML код

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
      prism:ViewModelLocator.AutowireViewModel="True" 
      xmlns:sfgrid="clr-namespace:Syncfusion.SfDataGrid.XForms;assembly=Syncfusion.SfDataGrid.XForms" 
      xmlns:b="clr-namespace:Xamarin.Behaviors;assembly=Xamarin.Behaviors" 
      x:Class="PrismUnityApp2.Views.Hovedside" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib" 
      Title="test"> 

    <ContentPage.Content> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="20" /> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="50" /> 
     <RowDefinition Height="50" /> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 

     <DatePicker Date="{Binding SelectedDate,Mode=TwoWay}" MinimumDate="{Binding MinimumSelectedDate,Mode=TwoWay}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" HorizontalOptions="Center"> 
     <DatePicker.Format>dd-MM-yyyy</DatePicker.Format> 
     </DatePicker> 

     <sfgrid:SfDataGrid x:Name="dataGrid" 
        AutoGenerateColumns="False" 
        AllowSwiping="true" 
        ColumnSizer="Star" 
        SelectedIndex="1" 
        SelectionMode="Single" 
       ItemsSource="{Binding ToemmeListe}" 
        AllowSorting="True" 
          Grid.Row="2" 
          Grid.Column="0" Grid.ColumnSpan="3" 
         > 
     <b:Interaction.Behaviors> 
      <b:BehaviorCollection> 
      <b:EventToCommand Command="{Binding SelectionCommand}" 
           CommandParameter="{x:Reference Name=dataGrid}" 
           EventName="SelectionChanged" /> 
      <b:EventToCommand Command="{Binding SwipeCommand}" 
          CommandParameter="{x:Reference Name=dataGrid}" 
          EventName="SwipeEnded" /> 
      </b:BehaviorCollection> 
     </b:Interaction.Behaviors> 
     <sfgrid:SfDataGrid.Columns x:TypeArguments="syncfusion:Columns"> 
      <sfgrid:GridTextColumn HeaderText="Fraktion" 
            MappingName="Fraktion" /> 
      <!--Fraktion--> 
      <sfgrid:GridTextColumn HeaderText="Type" 
            MappingName="Type" /> 
      <!--Type--> 
      <sfgrid:GridTextColumn HeaderText="Vaegt" 
            MappingName="Vaegt" /> 
      <!--vægt--> 
     </sfgrid:SfDataGrid.Columns> 

     <sfgrid:SfDataGrid.LeftSwipeTemplate> 
      <DataTemplate> 
      <ContentView BackgroundColor="#1AAA87" > 
       <Grid IsVisible="True"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width ="20" /> 
        <ColumnDefinition Width ="*" /> 
       </Grid.ColumnDefinitions> 

       <Label Grid.Column="1" 
        Text ="Slet" 
        HorizontalTextAlignment="Start" 
        VerticalTextAlignment="Center" 
        LineBreakMode ="NoWrap" 
        BackgroundColor="Red" 
        TextColor ="White"/> 


       </Grid> 
      </ContentView> 
      </DataTemplate> 
     </sfgrid:SfDataGrid.LeftSwipeTemplate> 

     </sfgrid:SfDataGrid> 


     <Button Text="Menu" FontSize="24" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3" HorizontalOptions="Center" Command="{Binding popup}"/> 

    </Grid> 


    </ContentPage.Content> 

</ContentPage> 

Главная ViewModel

using Prism.Commands; 
using Prism.Mvvm; 
using Prism.Navigation; 
using Syncfusion.SfDataGrid.XForms; 
using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceModel; 
using System.Threading.Tasks; 
using Xamarin.Forms; 

namespace PrismUnityApp2.ViewModels 
{ 


    public class HovedsideViewModel : BindableBase, INotifyPropertyChanged, INavigationAware 
    { 
     MobileService.VaksServiceClient ws = new MobileService.VaksServiceClient(); 
     INavigationService _navigationService; 
     public event PropertyChangedEventHandler PropertyChanged; 


     #region Properties 
     private DateTime selectedDate; 
     public DateTime SelectedDate 
     { 
      get { return selectedDate; } 
      set 
      { 
       if (selectedDate != value) 
       { 
        selectedDate = value; 

        if (PropertyChanged != null) 
        { 
         PropertyChanged(this, 
          new PropertyChangedEventArgs("SelectedDate")); 

        } 
       } 
      } 
     } 

     private DateTime minimumSelectedDate; 
     public DateTime MinimumSelectedDate 
     { 
      get { return minimumSelectedDate; } 
      set 
      { 
       if (minimumSelectedDate != value) 
       { 
        minimumSelectedDate = value; 

        if (PropertyChanged != null) 
        { 
         PropertyChanged(this, 
          new PropertyChangedEventArgs("MinimumSelectedDate")); 
        } 
       } 
      } 
     } 

     public DelegateCommand Navigatetest { get; private set; } 
     public DelegateCommand NavigateToBestilling { get; private set; } 
     public DelegateCommand popup { get; private set; } 

     public string latitude { get; set; } 
     private string _longitude; 

     public string longitude 
     { 
      get { return _longitude; } 
      set { _longitude = value; } 
     } 

     public String PladsID { get; set; } 

     private ObservableCollection<ToemningData> toemmeListe; 

     public ObservableCollection<ToemningData> ToemmeListe 
     { 
      get { return toemmeListe; } 
      set { this.toemmeListe = value; } 
     } 
     #endregion 



     public HovedsideViewModel(INavigationService navigationService) 
     { 

      SetRowData(); // initialize the grid 


      SelectedDate = DateTime.Today.AddDays(1); 


      _navigationService = navigationService; 
      Navigatetest = new DelegateCommand(Navigate); 
      NavigateToBestilling = new DelegateCommand(_NavigateToBestilling); 
      popup = new DelegateCommand(_popup); 

      selectionCommand = new Command<SfDataGrid>(onSelectionChanged); 
      swipeCommand = new Command<SfDataGrid>(onSwipeChanged); 
      selectedItems = new ObservableCollection<object>(); 
     } 

     private Command<SfDataGrid> selectionCommand; 
     public Command<SfDataGrid> SelectionCommand 
     { 
      get { return selectionCommand; } 
      set { selectionCommand = value; } 
     } 

     private Command<SfDataGrid> swipeCommand; 
     public Command<SfDataGrid> SwipeCommand 
     { 
      get { return swipeCommand; } 
      set { swipeCommand = value; } 
     } 

     private ObservableCollection<object> selectedItems; 

     public ObservableCollection<object> SelectedItems 
     { 
      get { return selectedItems; } 
      set { selectedItems = value; } 
     } 

     private void onSelectionChanged(SfDataGrid obj) 
     { 
      //gets the selected items in the datagrid 
      selectedItems = obj.SelectedItems; 
     } 

     private void onSwipeChanged(SfDataGrid obj) 
     { 

      selectedItems = obj.SelectedItems; // returns null on all properties 
     } 




     async void _popup() 
     { 
      Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => 
      { 
       var action = await App.Current.MainPage.DisplayActionSheet("ActionSheet: SavePhoto?", null, null, "Manuel bestilling", "Scan", "Send", "Fortryd"); 
       switch (action) 
       { 
        case "Manuel bestilling": 
         _NavigateToBestilling(); 
         break; 
        case "Scan": 
         Navigate(); 
         break; 
        case "Send": 
         // TODO make webservice that sends recipe 
         break; 
        case "Fortryd": 
         // Nothing 
         break; 
        default: 
         break; 
       } 
      }); 


     } 

     MobileService.Toemning ToWCFServiceTodoItem(MobileService.Toemning item) 
     { 
      return new MobileService.Toemning 
      { 
       Fraktion = item.Fraktion, 
       ToemmeId = item.ToemmeId, 
       Type = item.Type, 
       date = item.date, 
       Latitude = item.Latitude, 
       Longitude = item.Longitude, 
       Weight = item.Weight, 
       PladsId = item.PladsId 
      }; 
     } 


     public async Task<ObservableCollection<MobileService.Toemning>> CallService(MobileService.Toemning item) 
     { 
      var todoItem = ToWCFServiceTodoItem(item); 
      MobileService.VaksServiceClient client = new MobileService.VaksServiceClient(new BasicHttpBinding(), new EndpointAddress("http://kss.vestfor.dk/Vaks2Svc/VaksService.svc?singleWsdl")); 
      var t = Task<ObservableCollection<MobileService.Toemning>>.Factory.FromAsync(
        ((MobileService.IVaksService)client.InnerChannel).BeginGetToemmeDatasByPladsId, 
        ((MobileService.IVaksService)client.InnerChannel).EndGetToemmeDatasByPladsId, 
        todoItem, TaskCreationOptions.None); 
      return await t; 
     } 

     public void SetRowData() 
     { 

      try 
      { 
       toemmeListe = new ObservableCollection<ToemningData>(); 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 

      ToemningData _ToemningData = new ToemningData(); 
      _ToemningData.Parent = this; 
      ToemmeListe.Add(_ToemningData); 
     } 



     #region Navigation 
     private void _NavigateToBestilling() 
     { 
      var p = new NavigationParameters(); 
      p.Add("pladsid", PladsID); 
      var ttttt = DateTime.Today; 
      if (SelectedDate.Date > DateTime.Now.Date) 
      { 
       p.Add("selecteddate", SelectedDate); 
      } 
      _navigationService.NavigateAsync("Bestilling", p); 

     } 

     private void Navigate() 
     { 
      var p = new NavigationParameters(); 
      p.Add("pladsid", PladsID); 
      p.Add("selecteddate", SelectedDate); 
      _navigationService.NavigateAsync("Scanner", p); 
     } 

     public void OnNavigatedFrom(NavigationParameters parameters) 
     { 

     } 

     public async void OnNavigatedTo(NavigationParameters parameters) 
     { 
      PladsID = parameters["pladsid"].ToString(); 


      if (parameters.ContainsKey("selecteddate")) 
      { 

       SelectedDate = DateTime.Parse(parameters["selecteddate"].ToString()); 
      } 
      GridUpdate(); 
     } 
     #endregion 

     public void GridUpdate() 
     { 
      Xamarin.Forms.Device.BeginInvokeOnMainThread(async() => 
      { 
       // if the phone inst near latitude "55,7070631" and longitude "12,4235393" then remove the part where it gets data from parameters 
       // and use the two lines under this 
       //latitude = "55,7070631"; 
       //longitude = "12,4235393"; 
       var ggg = await CallService(new MobileService.Toemning { PladsId = Convert.ToInt32(PladsID), date = new DateTime(2016, 11, 1) }); // the date is set to a day where there is data // TODO set date = DateTime.Today.AddDays(1); 

       ToemmeListe.Clear(); 
       foreach (var toemming in ggg) 
       { 

        ToemningData _ToemningData = new ToemningData(); 
        _ToemningData.Parent = this; 
        _ToemningData.Fraktion = toemming.Fraktion; 
        _ToemningData.ToemmeID = toemming.ToemmeId; 
        _ToemningData.Type = toemming.Type; 
        _ToemningData.Vaegt = toemming.Weight; 
        ToemmeListe.Add(_ToemningData); 
       } 

      }); 

     } 

     public void GridDelete() 
     { 

     } 

    } 
} 

модель представление, что строки использовать, но получает отправить к главному ViewModel

using Prism.Commands; 
using System; 
using System.ComponentModel; 
using Xamarin.Forms; 

namespace PrismUnityApp2.ViewModels 
{ 
    public class ToemningData : INotifyPropertyChanged 
    { 

     public DelegateCommand DeleteRow { get; private set; } 

     public ToemningData() 
     { 
      DeleteRow = new DelegateCommand(_DeleteRow); 
     } 



     private void _DeleteRow() // Do not delete anything from yesterday or before 
     { 
      // TODO get the ID of the selected(swiped) ROW 
      // TODO sendt it to GridDelete() where it will make a WS call and remove that row of data 
      //Parent.GridDelete(); 
      Parent.GridUpdate(); 

     } 


     private int toemmeID { get; set; } 
     public int ToemmeID 
     { 
      get 
      { 
       return toemmeID; 
      } 
      set 
      { 
       this.toemmeID = value; 
       RaisePropertyChanged("ToemmeID"); 
      } 
     } 

     private string fraktion { get; set; } 
     public string Fraktion 
     { 
      get 
      { 
       return fraktion; 
      } 
      set 
      { 
       this.fraktion = value; 
       RaisePropertyChanged("Fraktion"); 
      } 
     } 

     private string type { get; set; } 
     public string Type 
     { 
      get 
      { 
       return type; 
      } 
      set 
      { 
       this.type = value; 
       RaisePropertyChanged("Type"); 
      } 

     } 

     private string vaegt { get; set; } 
     public string Vaegt 
     { 
      get 
      { 
       return vaegt; 
      } 
      set 
      { 
       this.vaegt = value; 
       RaisePropertyChanged("Vaegt"); 
      } 
     } 

     private string transportType { get; set; } 
     public string TransportType 
     { 
      get 
      { 
       return transportType; 
      } 
      set 
      { 
       this.transportType = value; 
       RaisePropertyChanged("TransportType"); 
      } 
     } 

     private int transportTypeID { get; set; } 
     public int TransportTypeID 
     { 
      get 
      { 
       return transportTypeID; 
      } 
      set 
      { 
       this.transportTypeID = value; 
       RaisePropertyChanged("TransportTypeID"); 
      } 
     } 

     private string pickerfraktion { get; set; } 
     public string PickerFraktion 
     { 
      get 
      { 
       return pickerfraktion; 
      } 
      set 
      { 
       this.pickerfraktion = value; 
       RaisePropertyChanged("PickerFraktion"); 
      } 
     } 

     private int pickerfraktionID { get; set; } 
     public int PickerFraktionID 
     { 
      get 
      { 
       return pickerfraktionID; 
      } 
      set 
      { 
       this.pickerfraktionID = value; 
       RaisePropertyChanged("PickerFraktionID"); 
      } 
     } 

     public HovedsideViewModel Parent { get; internal set; } 

     #region INotifyPropertyChanged implementation 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void RaisePropertyChanged(String Name) 
     { 
      if (PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(Name)); 
     } 

     #endregion 
    } 
} 

Есть ли способ я могу получить данные из строки, проводя его вместо используя SelectionChanged события?

im using visual studio 2015 community, xamarin.Forms 2.3.3.168, prism v6.2.0 Syncfusion 14.4.0.15. главным образом запустить его на XPERIA z3 сони с Android версии 6.0.1 и с использованием API 23 я также использовать тест его на виртуальной 6с iPhone плюс IOS 10,0

Любая помощь высоко оценил

+0

'SelectedIndex' назначается, может не использоваться, что индекс против вашей модели данных – SushiHangover

ответ

0

Вы можете получить RowData по обработка SwipeEnded мероприятие. SwipeEndedEventArgs есть RowData. Пожалуйста, обратитесь к приведенному ниже примеру кода.

private void dataGrid_SwipeEnded(object sender, SwipeEndedEventArgs e) 
{ 
    var rowdata = e.RowData; 
} 
+0

я не смог достичь SwipeEndedEventArgs события, используя MVVM , но я в конечном итоге не используя MVVM и только с помощью кода за тогда я нет проблем с получением данных – Zarp

+0

, но спасибо за ответ – Zarp