Button w ListView

M8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Witam,
W aplikacji WCF wyświetlam w listview dane pochodzące z bazy:

Kopiuj
 
 private async void FindPromotion()//wyszukiwanie promocji
        {
            MobileServiceCollection<DataModel.promotions, DataModel.promotions> items2;
            IMobileServiceTable<DataModel.promotions> todoTable2 = App.MobileService.GetTable<DataModel.promotions>();
  

                string _place = textInputPlace.Text;  
                string _product = PCombo.SelectedItem.ToString();
                items2 = await todoTable2.Where(ToDoItem => ToDoItem.Place == _place && ToDoItem.Products == _product).ToCollectionAsync();
         
            ListItems.ItemsSource = items2; //zwrócenie listy Category
            

        }

Chciałabym, aby po prawej strony listy, przy każdej wyświetlonej pozycji pojawił się przycisk, po którego kliknięciu nastąpi pobranie wartości int z bazy (wartość przypisaną do zaznaczonej pozycji) i zwiększenie wartości o 1. Czy istnieje taki sposób? Próbowałam kilku, ale mój główny problem na tym, że wyświetla się tylko jeden przycisk, a chciałabym, żeby było ich tyle ile wierszy wyświetlonych w listview.
Kod w xaml:

Kopiuj
 <ListView x:Name="ListItems" Foreground="White"  HorizontalAlignment="Left" Height="693" Margin="0,82,0,-7" VerticalAlignment="Top" Width="858">
                    <TextBlock Text="{Binding ''}"  />
                    <Button HorizontalAlignment="Left" Margin="718,10,0,692" x:Name="NotifyButton" Width="80" Content="Nie ma takiej promocji" CommandParameter="{Binding Notification}" Click="NotifyButton_Click"/>
                </ListView>
 
NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
0

Potrzebujesz ItemTemplate, żeby zdefiniować, jak każdy element będzie wyświetlany, np.

Kopiuj
<ListView.ItemTemplate>
	<DataTemplate>
		<StackPanel Orientation="Horizontal">
			<TextBlock ... />
			<Button ... />
		</StackPanel>
	</DataTemplate>            
</ListView.ItemTemplate>
M8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Dziękuję, dodanie

Kopiuj
StackPanel 

rozwiązało problem z wyświetlaniem. Jednak nadal nie wiem jak pobrać wartość int z bazy(nie jest wyświetlana w listview), do której przycisk się odnosi. Znalazłam taki kod, lecz nie działa:

Kopiuj
 private void NotifyButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            IsEnabled = false;
            Button button = sender as Button;
            DataModel.promotions promo = button.DataContext as DataModel.promotions;
            int not = promo.Notification;
            not++;
            promo.Notification = not;
        }
 
NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
0

Co to znaczy "nie działa"? Co konkretnie dzieje się źle?

M8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Nie dodaje wartości 1, jak w tabeli było 0 tak po wykonaniu tej funkcji nadal jest 0.

M8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Problem rozwiązany. Funkcja powinna wyglądać następująco:

Kopiuj
  private async void NotifyButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            Button button = sender as Button;
            button.IsEnabled = false;
            DataModel.promotions promo = button.DataContext as DataModel.promotions;
            int not = promo.Notification;
            not++;
            promo.Notification = not;
            await todoTable2.UpdateAsync(promo);     
        }
 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.