Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> c# - problem z xaml
djbarca
post
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował djbarca 27.06.2012, 16:19:35
Go to the top of the page
+Quote Post
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post
djbarca
post
Post #3





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował djbarca 30.06.2012, 10:54:20
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 03:38