2017-03-21 42 views
0

私のプログラムでは、Idに相当するboolを変更するために、Xamarinアプリケーションのリストから現在のIDを取得しようとしています。XamarinのテーブルからIDを取得

このアプリケーションでは、ユーザーはリストと各要素に関連付けられたスイッチで表されます。目標は、スイッチがトグルされたときにテーブルのブール値をfalseからtrueに変更することです。私は.csで

[Screen[1]

(底部に向かってhandle_toggled参照)スイッチがトグルされたとき、私はブール値を更新ファイル:トグルスイッチを処理するとき

 public partial class DefineBuilding : ContentPage 
    { 
     //string currentDefineDescription; 
     //int currentDefineId; 

     DefineTable current; 


     private const string Url = "http://localhost:5000/define"; 
     private HttpClient _client = new HttpClient(); 
     private ObservableCollection<DefineTable> _define; 


     public DefineBuilding(DefineTable defineList) 
     { 
      if (defineList == null) throw new ArgumentNullException(); 

      //BindingContext = defineList; 

      //currentDefineId = defineList.defineId; 
      //currentDefineDescription = defineList.defineDescription; 
      current = defineList; 

      InitializeComponent(); 

      //defineList = Current_item.BindingContext; 
     } 


     protected override async void OnAppearing() 
     { 
      var content = await _client.GetStringAsync(Url); 
      var posts = JsonConvert.DeserializeObject<IEnumerable<DefineTable>>(content); 
      _define = new ObservableCollection<DefineTable>(posts); 
      defineBuildingItems.ItemsSource = _define; 


      base.OnAppearing(); 
     } 

     async void Handle_Toggled(object sender, Xamarin.Forms.ToggledEventArgs e) 
     { 
      //current.defineId = 
      current.defineBool = true; 
      defineDataService defineTable = new defineDataService(); 
      await defineTable.UpdateData(current); 

     } 

     async void Handle_Clicked(object sender, System.EventArgs e) 
     { 
      await Navigation.PushAsync(new ChecklistPage()); 
     } 




    } 
} 

は、しかし、私はすることはできませんよIdを手に入れる。私のxamlファイルではIdを取得することができますが、このIDをどのように適用するかはわかりません。

<StackLayout Orientation="Horizontal"> 
         <StackLayout Orientation="Vertical"> 
          <Label Text="{Binding defineDescription}" 
            HorizontalOptions="FillAndExpand" x:Name="Current_item"/> 

         </StackLayout> 

          <Switch BindingContext ="{Binding defineId}" HorizontalOptions="EndAndExpand" 
            Toggled="Handle_Toggled"/> 

         </StackLayout> 

私のクラスに正しいIDを取得する方法上の任意のアイデア:ここ

は私のXAMLファイル(同上のBindingContext = "{バインディングdefineIdを}" を参照してください)からのサンプルですか?

答えて

1

送信者はイベントを発生させるオブジェクトです(この場合はスイッチです)。スイッチのバインディングコンテキストとしてIDが割り当てられているので、適切なキャストを実行してIDを取得できるはずです。

async void Handle_Toggled(object sender, Xamarin.Forms.ToggledEventArgs e) 
    { 
     var id = (int) ((Switch)sender).BindingContext; 

     //current.defineId = 
     current.defineBool = true; 
     defineDataService defineTable = new defineDataService(); 
     await defineTable.UpdateData(current); 

    } 
+0

これはうまくいきました。テーブルから他の要素を取り出すことも可能ですか?現時点では、テーブルが更新されると、他のプロパティはnullになります。 – Seb

+0

どのようにテーブルを構築しているかについてもっと知ることなく、言うことは難しいです。一般的に、ListViewはデータバインドされたリストに適しています。 – Jason

+0

私のテーブルは、バックエンドの独立したプロジェクトで作成されます。アプリケーションからバックエンドプロジェクトにクエリ(おそらくlinqクエリ)を行う可能性はありますか?または、バックエンドプロジェクトへのリクエストを実行し、そこからクエリを実行する方法はありますか? – Seb

関連する問題