2017-11-03 8 views
0

私はボタンのタグにバインドしたボタンからIDを取得しようとしましたが、試行したときに、コンテキストとテキストを設定することができ、IDが画面に表示されてもnull値エラーがスローされます良い。UWPツールキットPullToRefreshListの項目のインデックスを取得する方法はありますか?

これで、リスト内のアイテムにインデックスを付けると、データテンプレートがそれらを生成するときに簡単に呼び出すことができ、それらをC#コードのIDと比較することができます。リストのための

XAML:イムは、後で取得するためのIDをバインドしようとしているところ

<my:PullToRefreshListView 
    x:Name="RefreshListView" 
    MinWidth="200" 
    Margin="24" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Bottom" 
    Background="White" 
    OverscrollLimit="0.4" 
    PullThreshold="100" 
    IsPullToRefreshWithMouseEnabled="True"> 
     <my:PullToRefreshListView.ItemTemplate > 
      <DataTemplate > 
       <StackPanel Name="ListPanel"> 
         <TextBlock AutomationProperties.Name="IdTextBlock" 
      Style="{StaticResource CaptionTextBlockStyle}" 
      Text="{Binding Id}" 
      TextWrapping="WrapWholeWords" /> 
         <TextBlock AutomationProperties.Name="{Binding Name}" 
      Style="{StaticResource CaptionTextBlockStyle}" 
      Text="{Binding Name}" 
      TextWrapping="WrapWholeWords" /> 
        <TextBlock AutomationProperties.Name="{Binding Sets}" 
      Style="{StaticResource CaptionTextBlockStyle}" 
      Text="{Binding Sets}" 
      TextWrapping="WrapWholeWords" /> 
        <TextBlock AutomationProperties.Name="{Binding SetTime}" 
      Style="{StaticResource CaptionTextBlockStyle}" 
      Text="{Binding SetTime}" 
      TextWrapping="WrapWholeWords" /> 
         <StackPanel Orientation="Horizontal"> 
          <Button Tag="{Binding Id}" Content="Delete" Click="DelButton_Click" Style="{StaticResource DrillButtons}" ></Button> 
          <Button Tag="{Binding Id}" Content="Update" Click="UpdateBtn_Click" Style="{StaticResource DrillButtons}" ></Button> 
         </StackPanel> 
        </StackPanel> 
      </DataTemplate> 
     </my:PullToRefreshListView.ItemTemplate> 
     <my:PullToRefreshListView.PullToRefreshContent> 
      <TextBlock FontSize="16" 
      Opacity="0.5" 
      Text="Pull down to refresh data" /> 
     </my:PullToRefreshListView.PullToRefreshContent> 
    </my:PullToRefreshListView 

上記スタックパネルからこれらの2つのボタンがあります。ボタンからIDに取る

<StackPanel Orientation="Horizontal"> 
          <Button Tag="{Binding Id}" Content="Delete" Click="DelButton_Click" Style="{StaticResource DrillButtons}" ></Button> 
          <Button Tag="{Binding Id}" Content="Update" Click="UpdateBtn_Click" Style="{StaticResource DrillButtons}" ></Button> 
         </StackPanel> 

HERESにする方法:

//Update button 
    private async void NewSubmitBtn_Click(object sender, RoutedEventArgs e) 
    { 
     String Name = NewNameBox.Text; 
     String id = (String)((Button)sender).Content; 
     int Sets; 
     int Time; 
     bool successfullyParsedTime = int.TryParse(NewSetsBox.Text, out Time); 
     bool successfullyParsedSets = int.TryParse(NewTimeBox.Text, out Sets); 

     if (successfullyParsedSets) 
     { 
      Sets = Int32.Parse(NewSetsBox.Text); 

     } 
     if (successfullyParsedTime) 
     { 
      Time = Int32.Parse(NewTimeBox.Text); 
     } 

     await ctv.combatDrillsTable.UpdateDrill(id, Name, Sets, Time, catagory); 
     ppup.IsOpen = false; 
     var addSuccess = new MessageDialog("Drill Updated"); 
     await addSuccess.ShowAsync(); 

    } 

HERESにデータ項目コード:私は追加

namespace UWPCombatApp 
{ 
class DrillItem 
{ 
    public string Id { get; set; } 

    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "sets")] 
    public int Sets { get; set; } 

    [JsonProperty(PropertyName = "settime")] 
    public int SetTime { get; set; } 

    [JsonProperty(PropertyName = "style")] 
    public string Style { get; set; } 

} 
} 

削除ポップアップ:

// Delete button 
    private void DelButton_Click(object sender, RoutedEventArgs e) 
    { 
     delpup.Height = Window.Current.Bounds.Height; 
     delpup.IsOpen = true; 
     id = (((Button)sender).Tag).ToString(); 
    } 

idはthisタグにバインドされています

private async void YesBtn_Click(object sender, RoutedEventArgs e) 
    { 
     await ctv.combatDrillsTable.DeleteDrillAsync(id); 
     var addSuccess = new MessageDialog("Drill Deleted"); 
     await addSuccess.ShowAsync(); 

    } 

答えて

0

なeventHandlerインサイド:

private async void NewSubmitBtn_Click(object sender, RoutedEventArgs e) 

あなたはID変数の値を設定している、彼らが選択したら、はい次の関数は、データベースから項目を削除するために呼び出されますタグの代わりに、コンテンツのボタンをクリックします。

変更:これに

String id = (String)((Button)sender).Content; 

String id = (String)((Button)sender).Tag; 

は、右のイベントハンドラを呼び出すようにしてください更新ボタンのクリックイベントに、あなたは ハンドラを呼び出しているので、

<Button Tag="{Binding Id}" Content="Update" Click="UpdateBtn_Click" Style="{StaticResource DrillButtons}" ></Button> 

の代わりに

<Button Tag="{Binding Id}" Content="Update" Click="NewSubmitBtn_Click" Style="{StaticResource DrillButtons}" ></Button> 

運が良かった!

+0

私はactully前にタグを設定し、updatebtnはNewSubmitBtnを呼び出すポップアップを呼び出します。私はあなたの実装を試みましたが、同じ結果がnullになっています。 – UWP122

+0

@ UWP122もっと多くの情報とコードを提供してください。実際の問題が何であるかは不明です。 ** UpdateBtn_Click **が** NewSubmit_Btn_Click **ハンドラにフックされたボタンを含むMessageDialogを起動する場合、送信者はMessageDialog内のボタンです。そのボタンにもタグが設定されていますか? –

+0

あなたが質問したようにコードを更新しました。基本的なことを明確にするために、リスト内に表示されているデータテンプレートからIDを取得し、アイテムのリストによって提供されるIDを取得します。それをAzureポータルの簡単なテーブルから削除してください。 – UWP122

関連する問題