Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> c# - problem z xaml
djbarca
post 27.06.2012, 15:30:01
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 28.06.2012, 10:09:04
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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 30.06.2012, 10:53:03
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 biggrin.gif

Ten post edytował djbarca 30.06.2012, 10:54:20
Go to the top of the page
+Quote Post
batman
post 30.06.2012, 15:07:43
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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 17:02