Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: c# - problem z xaml
Forum PHP.pl > Inne > Hydepark
djbarca
witam. mam problem i jak zwykle mało czasu żeby znaleźć rozwiązanie samemu dlatego zwracam się do Was o pomoc.

Mam taki kod:

  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  2. <ListBox Height="595" HorizontalAlignment="Left" Margin="6,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="450" SelectionChanged="listBox1_SelectionChanged">
  3. <ListBox.ItemTemplate>
  4. <DataTemplate>
  5. <Border BorderBrush="Aqua" BorderThickness="1"
  6. Padding="5" Margin="5" Width="440" Height="90">
  7. <Grid>
  8. <Grid.RowDefinitions>
  9. <RowDefinition/>
  10. <RowDefinition/>
  11. </Grid.RowDefinitions>
  12. <Grid.ColumnDefinitions>
  13. <ColumnDefinition />
  14. <ColumnDefinition />
  15. </Grid.ColumnDefinitions>
  16.  
  17. <TextBlock Grid.Row="0" Grid.Column="0" Text="Nazwa:"/>
  18. <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding _nazwa}" />
  19. <TextBlock Grid.Row="1" Grid.Column="0" Text="Identyfikator:"/>
  20. <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding _identyfikator}"/>
  21.  
  22. </Grid>
  23. </Border>
  24. </DataTemplate>
  25. </ListBox.ItemTemplate>
  26. </ListBox>
  27. </Grid>



jak sformatować tą liste abym mógł dla aktualnie wybranej wartosci pobrac jakis identyfikator.. cos na wzór:
  1. <select multiple="multiple" name="nazwa">
  2. <option value="123">nazwa 1
  3. <option value="153">nazwa 2
  4. <option value="523">nazwa 3
  5. </select>
  6. </form>


oraz w jaki sposob sie do tego odwolac w funkcji:
  1.  
  2. private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
  3. {
  4.  
  5. }
batman
W dużym skrócie:
1. W elemencie ListBox jako ItemsSource bindujesz jakąś kolekcję z danymi.
2. W obsłudze zdarzenia rzutujesz sendera na właściwy tym i pobierasz jego DataContext.

Musiałbym to sprawdzić, bo mogłem coś przegapić, ale generalnie tak to się robi.
djbarca
tzn rozegrałem to inaczej (może w gorszy sposób - ale działa). Zbindowałem ListBox i dałem przycisk dla którego obsłużyłem akcje kliknięcia , do przycisku dałem tag który zawiera identyfikator i ot to biggrin.gif
batman
Przykład z bindowaniem, o którym pisałem wcześniej.

ViewModel:
[CSHARP] pobierz, plaintext
  1. class ViewModel
  2. {
  3. private List<Item> items = new List<Item> { new Item { ID = 1 }, new Item { ID = 2 }, new Item { ID = 3 } };
  4.  
  5. public List<Item> Items
  6. {
  7. get
  8. {
  9. return items;
  10. }
  11. set
  12. {
  13. items = value;
  14. }
  15. }
  16. }
[CSHARP] pobierz, plaintext


Klasa Item:
[CSHARP] pobierz, plaintext
  1. class Item
  2. {
  3. public int ID { set; get; }
  4. }
[CSHARP] pobierz, plaintext


Xaml:
  1. <ListBox ItemsSource="{Binding Items}" SelectionChanged="ListBox_SelectionChanged">
  2. <ListBox.ItemTemplate>
  3. <DataTemplate>
  4. <TextBlock Text="{Binding ID}" />
  5. </DataTemplate>
  6. </ListBox.ItemTemplate>
  7. </ListBox>


Obsługa zdarzenia:
[CSHARP] pobierz, plaintext
  1. private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  2. {
  3. int id = ((sender as ListBox).SelectedItem as Item).ID;
  4. MessageBox.Show(id.ToString());
  5. }
[CSHARP] pobierz, plaintext


Na koniec pozostało wskazać ViewModel jako DataContext (w konstruktorze)
[CSHARP] pobierz, plaintext
  1. this.DataContext = new ViewModel();
[CSHARP] pobierz, plaintext


Klasa Item, to tylko przykład i może zawierać dowolną ilość pól, a jej inicjalizacja nie musi odbywać się w ViewModelu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.