none
Rückgabe von ListBox Items funktioniert nicht RRS feed

  • Frage

  • Hallo Leute,

    für eine Silverlight App - für das WP7 - die ich entwickeln möchte, habe ich eine ListBox erstellt, die ich dynamisch mit Inhalt fülle. Leider kann ich hinterher nicht mehr auf den Inhalt zugreifen, weshalb ein weiterarbeiten nicht möglich ist.

    page.xaml:

    <ListBox Name="listBox" Width="458" Margin="10,0,12,78" Grid.Row="1" BorderBrush="Silver" Background="Black" 
    SelectionChanged="ListBox_SelectionChanged1"> <ListBox.ItemTemplate> <DataTemplate> <Border> <StackPanel Orientation="Horizontal" Height="132"> <TextBlock Text="{Binding dateString}" FontSize="26" Foreground="Red" /> <Button Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" Height="100" Width="100" Content="{Binding dateString}"
    Tag
    ="{Binding}" Click="ListBoxButtonClick"/> <StackPanel Width="370" Orientation="Vertical" Background="#FFAAAAAA"> <TextBlock Text="{Binding title}" FontSize="24" TextWrapping="Wrap" Foreground="Black" FontWeight="Bold" /> <TextBlock Text="{Binding text_prev}" FontSize="22" TextWrapping="Wrap" Foreground="Black" /> </StackPanel> </StackPanel> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

    page.xaml.cs:

    // Liste mit den geparsten Einträgen füllen
    list = ParseXml.parseList(FileManagment.LoadFromFile("list.xml"));
    listBox.ItemsSource = list;
    

     

    Im darauf folgenden Code möchte ich nun per Klick auf einen TextBlock oder den Button auf das jeweilige ListBox Item zugreifen. Aber das bekomme ich einfach nicht hin (daher hier auch keine Ansätze).

    Bei einer anderen ListBox bin ich mit:

    <ListBox Background="#FFD72424" Height="200" HorizontalAlignment="Left" Margin="25,25,0,0" Name="listBox1" 
    VerticalAlignment="Top" Width="90" SelectionChanged="ListBox_SelectionChanged"> <TextBlock Text="1" FontSize="36" Margin="15,0,0,0" HorizontalAlignment="Right"/> <TextBlock Text="2" FontSize="36" Margin="15,0,0,0" HorizontalAlignment="Right"/> <TextBlock Text="3" FontSize="36" Margin="15,0,0,0" HorizontalAlignment="Right"/> </ListBox>
    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
     ListBox liste = sender as ListBox;
     TextBlock block = liste.SelectedItem as TextBlock;
     MessageBox.Show("Inhalt des TextBlock: " + block.Text);
    }
    
    sehr gut weitergekommen. Hier stand dann in der MessageBox, je nach angeklicktem Block, "Inhalt des TextBlock: 1" etc.. Aber bei der dynamisch generierten ListBox scheint es nicht zu gehen, da die Textblöcke durch {Binding title} usw. ihre Einträge bekommen.

     

    Wie könnte ich jetzt fortfahren? Ich bräuchte eigentlich nur einen Rückgabewert, der mir sagt, welchen Teil der ListBox, oder welchen TextBlock / Button ich angeklickt habe. Bin leider ahnungslos.

    Vielen Dank im voraus.

    -peeteepeet-



    • Verschoben Robert Breitenhofer Mittwoch, 15. Juni 2011 09:29 Windows Phone 7 (aus:Silverlight)
    Mittwoch, 1. Juni 2011 23:56

Antworten

  • Hallo peeteepeet,

    Aus diesem Thread (Windows 7 Mobile FindName equivalent?) und diesem Thread (WP7.1 Consume OData) ist folgendes herausgekommen J

    [XAML]

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <ListBox HorizontalAlignment="Left" Margin="6,116,0,19" Name="lbProducts" Width="450" SelectionChanged="OnListBoxSelectedChanged">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <StackPanel Name="stkPanel" Orientation="Vertical">
                  <TextBlock x:Name="txt1" Text="{Binding ProductName}"/>
                </StackPanel>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
          <Button Content="Get Data" Name="button1" Width="237" Margin="87,6,132,650" Click="button1_Click" />
        </Grid>
      </Grid>
    

     

    [Extensions.cs]

    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.Generic;
    
    namespace WindowsPhoneApplication1
    {
      public static class Extensions
      {
        public static T FindParentOfType<T>(this FrameworkElement element)
        {
          var parent = VisualTreeHelper.GetParent(element) as FrameworkElement;
    
          while (parent != null)
          {
            if (parent is T)
              return (T)(object)parent;
    
            parent = VisualTreeHelper.GetParent(parent) as FrameworkElement;
          }
          return default(T);
        }
    
        // Methods
        public static List<T> GetChildrenByType<T>(this UIElement element) where T : UIElement
        {
          return element.GetChildrenByType<T>(null);
        }
    
        public static List<T> GetChildrenByType<T>(this UIElement element, Func<T, bool> condition) where T : UIElement
        {
          List<T> results = new List<T>();
          GetChildrenByType<T>(element, condition, results);
          return results;
        }
    
        private static void GetChildrenByType<T>(UIElement element, Func<T, bool> condition, List<T> results) where T : UIElement
        {
          for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
          {
            UIElement child = VisualTreeHelper.GetChild(element, i) as UIElement;
            if (child != null)
            {
              T t = child as T;
              if (t != null)
              {
                if (condition == null)
                {
                  results.Add(t);
                }
                else if (condition(t))
                {
                  results.Add(t);
                }
              }
              GetChildrenByType<T>(child, condition, results);
            }
          }
        }
    
        public static bool HasChildrenByType<T>(this UIElement element, Func<T, bool> condition) where T : UIElement
        {
          return (element.GetChildrenByType<T>(condition).Count != 0);
        }
    
    
      }
    }
    

     

    [MainPage.xaml.cs]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using Microsoft.Phone.Controls;
    using System.Xml.Linq;
    using System.IO;
    using System.Xml;
    using System.Windows.Media;
    
    namespace WindowsPhoneApplication1
    {
      public partial class MainPage : PhoneApplicationPage
      {
       
    
        // Constructor
        public MainPage()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          WebClient wc = new WebClient();
          wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
          wc.DownloadStringAsync(new Uri("http://services.odata.org/OData/OData.svc/Products"));
        }
    
        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
    
          if (e.Error == null)
          {
            StringReader stream = new StringReader(e.Result);
            XmlReader reader = XmlReader.Create(stream);
    
    
            XDocument root = XDocument.Load(reader);
    
            XNamespace sp = "http://www.w3.org/2005/Atom";
            XNamespace ds = "http://schemas.microsoft.com/ado/2007/08/dataservices";
            XNamespace meta = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
    
            IEnumerable<XElement> _charInfoEl = root.Descendants(sp + "entry");
    
            var _charInfo = from l in _charInfoEl
                    select new Products()
                    {
                      ProductName = l.Element(sp + "title").Value
                    };
    
            lbProducts.ItemsSource = _charInfo;
    
            reader.Close();
            reader.Dispose();
    
            stream.Close();
            stream.Dispose();
            
          }
          
        }
    
        public class Products
        {
          public string ProductName { get; set; }
        }
    
        private void OnListBoxSelectedChanged(object sender, SelectionChangedEventArgs e)
        {
          ListBoxItem item = (ListBoxItem)lbProducts.ItemContainerGenerator.ContainerFromIndex(lbProducts.SelectedIndex);
          TextBlock txt = item.GetChildrenByType<TextBlock>().Where(x => x.Name == "txt1").FirstOrDefault();
          MessageBox.Show(txt.Text);
        }
    
      }
    }
    

     

    Ergebnis: Wenn man auf einem Item aus der ListBox zugreift, springt eine MessageBox auf die den Wert aus dem TextBlock enthaltet (z.B. „LCD HDTV“)

    Interessant noch zum lesen: Phone 7 Series Listbox Example

    Grüße,

    Robert

    Mittwoch, 15. Juni 2011 09:27

Alle Antworten

  • Was für ein Objekt ist denn das SelectedItem im SelectionChanged EventHandler?
    Freitag, 3. Juni 2011 07:05
  • Hallo,

     

    also das ist eine gute Frage... davon habe ich leider keine Ahnung. Ich habe das mit dem

    SelectionChanged="ListBox_SelectionChanged"

    mal irgendwo im Internet gefunden und das dann auch nur so verwendet, wie in meinem 2ten Beispiel, wo es hervorragend funktioniert.

    Ich weiss sonst leider nichts darüber. ):

     

    -peeteepeet-

     

    Freitag, 3. Juni 2011 10:24
  • Hallo peeteepeet,

    warum steht im ersten Beispiel beim Eventhändler eine 1 hinter ListBox_SelectionChanged?

    Zeig uns doch mal den Code für den Eventhändler im Beispiel 1

     

    Schöne Grüße

    Oliver

    P.S. Dü solltest für WP7 spezifische Fragen das WP7 Forum benutzen.

    Freitag, 3. Juni 2011 10:43
  • Hallo Herr Michalski,

     

    also beim Beispiel 1 ist das mit der 1 am Ende von ListBox_SelectionChanged nur ein Abschreibfehler von mir. Die heißen schon gleich. Und ein Beispiel Code habe ich nicht weil ich nichts hinbekommen habe.

    Ich würde das halt gerne so haben wie in meinem 2ten Beispiel. Weil da bekomm ich ganz einfach raus, welchen TextBlock ich angeklickt habe. Das geht aber bei der ersten ListBox (also die dynamisch gefüllt wird) nicht.

     

    Wenn ich das wie im 2ten Beispiel versuche:

     

    private void ListBox_SelectionChanged1(object sender, SelectionChangedEventArgs e)
    {
     try
     {
     ListBox lb = sender as ListBox;
     TextBlock tb = lb.SelectedItem as TextBlock;
     MessageBox.Show("-> " + tb.Text);
     }
     catch (Exception exc)
     {
     MessageBox.Show("Fehler bei Ausgabe des Inhalts von TextBlock: " + exc.ToString());
     }
    }
    

     

     

    bekomme ich nur folgendes als Fehler (exc.ToString()):

    System.NullReferenceException: NullReferenceException
    bei MyApp.MainList.ListBox_SelectionChanged1(Object sender, SelectionChangedEventArgs e)
    bei System.Windows.Controls.Primitives.Selector.OnSelectionChanged(SelectionChangedEventArgs e)
    bei System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(List`1 unselectedItems, List`1 selectedItems)
    bei System.Windows.Controls.Primitives.Selector.SelectionChanger.End()
    bei System.Windows.Controls.Primitives.Selector.SelectionChanger.SelectJustThisItem(Int32 oldIndex, Int32 newIndex)
    bei System.Windows.Controls.ListBox.MakeSingleSelection(Int32 index)
    bei System.Windows.Controls.ListBox.HandleItemSelection(ListBoxItem item, Boolean isMouseSelection)
    bei System.Windows.Controls.ListBox.OnListBoxItemClicked(ListBoxItem item)
    bei System.Windows.Controls.ListBoxItem.OnManipulationCompleted(ManipulationCompletedEventArgs e)
    bei System.Windows.Controls.Control.OnManipulationCompleted(Control ctrl, EventArgs e)
    bei MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

     

    Und zum P.S.: ich dachte das ist eher eine Silverlight Frage. Und ein Silverlight für WP7 Entwicklung Forum gibt es nicht^^

     

    -peeteepeet-


    Freitag, 3. Juni 2011 11:05
  • Hallo peeteepeet,

    >>Hallo Herr Michalski,

    Lass die Förmlichkeiten. Wir benutzen hier die Vornamen.

    >>Und ein Silverlight für WP7 Entwicklung Forum gibt es nicht

    1. Du hättest aber eine größere Chance, dass jemand dein Problem schon kennt und somit auch eine Lösung parat hat.

    2. Das WP7 Forum ist ein SL for WP7 Forum. Nach XNA fragt eigenlich kaum einer (dafür gibt es create.msdn.com)

    Kommen wir zur Sache. Hast Du die Möglichkeit dein Projekt irgendwo hochzuladen (z.B. SkyDrive)? Der Fehler steckt in einem Teil des Codes, den Du uns noch nicht gezeigt hast.

    Schöne Grüße

    Oliver

    Freitag, 3. Juni 2011 12:07
  • Hallo Oliver,

    der ganze Code, der sich auf das Problem bezieht:

     

    Eine Klasse zum parsen von .xml Dateien (selbst geschrieben) (ParseXml.cs):

    public static List<Eintrag> parseList(String xmlString)
    {
     String tmp = "";
     try
     {
     // Neuen Eintrag erstellen
     Eintrag[] entry = new Eintrag[ParseXml.countEntrys(xmlString)];
    
     // Der XmlReader durchsucht den stringstream nach <Tags>
     using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
     {
      // XML String parsen aus Datei
      for (int i = 0; i < ParseXml.countEntrys(xmlString); i++)
      {
      // erstelle neuen Eintrag
      entry[i] = new Eintrag();
    
      // schreibe i in Eintrag.entryCount
      entry[i].entryCount = i;
    
      // ließ zum Tag "timestamp"
      reader.ReadToFollowing("timestamp");
    
      // schreibe Datum in tmp
      tmp = reader.ReadElementContentAsString();
    
      // schreibe Datum in Eintrag-Objekt
      entry[i].dateString = tmp;
    
      // speichere Datum mit Laufindex in Settings
      SettingSaver.manageSetting(i + "Datum", tmp);
    
      // ließ zum Tag "title"
      reader.ReadToFollowing("title");
    
      // schreibe Titel in tmp
      tmp = reader.ReadElementContentAsString();
    
      // schreibe Titel in Eintrag-Objekt
      entry[i].title = tmp;
    
      // speichere Titel mit Laufindex in Settings
      SettingSaver.manageSetting(i + "Titel", tmp);
    
      // ließ zum Tag "text"
      reader.ReadToFollowing("text");
    
      // schreibe Text in tmp
      tmp = reader.ReadElementContentAsString();
    
      // schreibe Text in Eintrag-Objekt
      entry[i].text_prev = tmp;
    
      // speichere Text mit Laufindex in Settings
      SettingSaver.manageSetting(i + "Text", tmp);
    
      // hänge das Eintrag-Objekt an die Liste an
      list.Add(entry[i]);
      }
     }
     return list;
     }
     catch (Exception e)
     {
     MessageBox.Show("Problem bei ParseXml aufgetreten: " + e.Message.ToString());
     }
     return null;
    }
    

    Der Teil meiner Page.xaml, der die ListBox enthält (MainList.xaml):

    <ListBox Name="listBox" Width="458" Margin="10,0,12,78" Grid.Row="1" BorderBrush="Silver" 
    Background
    ="Black" SelectionChanged="ListBox_SelectionChanged1"> <ListBox.ItemTemplate> <DataTemplate> <Border> <StackPanel Orientation="Horizontal" Height="132"> <TextBlock Text="{Binding dateString}" FontSize="26" Foreground="Red" /> <Button Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" Height="100" Width="100" Content="{Binding dateString}" Tag="{Binding}" Click="ListBoxButtonClick"/> <StackPanel Width="370" Orientation="Vertical" Background="#FFAAAAAA"> <TextBlock Text="{Binding title}" FontSize="24" TextWrapping="Wrap" Foreground="Black" FontWeight="Bold" /> <TextBlock Text="{Binding text_prev}" FontSize="22" TextWrapping="Wrap" Foreground="Black" /> </StackPanel> </StackPanel> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

    Der .cs Code von MainList.xaml:

        public MainList()
    {
    InitializeComponent();

    // Liste mit den geparsten Einträgen füllen
    list = ParseXml.parseList(FileManagment.LoadFromFile("list.xml"));
    listBox.ItemsSource = list;
    }

    private void ListBox_SelectionChanged1(object sender, SelectionChangedEventArgs e)
    {
    try
    {
    ListBox lb = sender as ListBox;
    TextBlock tb = lb.SelectedItem as TextBlock;

    MessageBox.Show("-> " + tb.Text);
    }
    catch (Exception exc)
    {
    MessageBox.Show("Fehler bei Ausgabe des Inhalts von TextBlock: " + exc.ToString());
    }
    }

    Das war alles was dafür zuständig ist. Sonst klappt eigentlich alles. Nur eben das Problem das ich nicht weiss welches ListBox Item ich da wirklich klicke... ):

    Hoffe etwas mehr Licht ins dunkle gebracht zu haben.

    -peeteepeet-



    Freitag, 3. Juni 2011 19:16
  • Hi peet... ;-)

    Mache mal bitte folgendes:

    schreibe an die Stelle von

    TextBlock tb = lb.SelectedItem as TextBlock;

    folgendes:

    var data = lb.SelectedItem;

    Die Messagebox änderst du auf MessageBox.Show(data.ToString()).

    Dann setzt du einen Haltepunkt auf die Zeile mit der Messagebox (Taste F9 drücken) und startest deine Anwendung. Sobald du nun ein Element ausgewählt hast wird dir der Code angezeigt. Deine Variablen sind aber nun mit Werten gefüllt. Dieser Prozess nennt sich "Debuggen".

    Du fährst nun mit der Maus über die Variable "Data" und schaust an was da drinn steht und welchen Typ sie hat. MIt der rechten Maustaste kannst du noch die "Schnellüberwachung" aktiviert. Das ist dann ein wenig übersichtlicher.

    Wenn du dann immer noch nicht weiterkommst einfach mal die Infos die du ermittelt hast posten.

    Ansonsten: Übern, Üben, Üben ;-)

     

    Daniel


    http://www.silverlight-community.de - deutsche Community mit Tutorials, Blogs und Usergroups
    Montag, 6. Juni 2011 13:39
  • Hallo Daniel,

    erstmal vielen Dank für den super Tip! Also das debuggen klappt soweit, auch deine Codezeile funktioniert.

    Wenn ich debugge, dann steht in der Variable data alles was ich in mein Eintrag-Objekt geschrieben habe. Und die MessageBox gibt aus:

    "MyApp.Eintrag"

    Aber danach erscheint ein Fehlerfenster:

    "Eine nicht behandelte Ausnahme des Typs

    "System.ServiceModel.FaultException`1" ist in System.ServiceModell.dll aufgetreten.

    Zusätzliche Informationen: Invalid session ID"

    Klicke ich auf weiter kommt dieses Fenster wieder und klicke ich dann auf weiter bin ich wieder in meiner  App.

    Also weiss ich ja zumindest, dass wenn ich auf ein Item der Liste klicke, dass es auch das Eintrag-Objekt das ich ihr zugefügt habe zurück gibt. Nur darauf zugreifen kann ich immernoch nicht.

    Ich glaub ich muss das irgendwie anders lösen... ):

    Vielleicht habt ihr ja sonst noch tolle Ideen. Immer gerne gesehen!

    Dienstag, 7. Juni 2011 19:35
  • Hallo peeteepeet,

    Aus diesem Thread (Windows 7 Mobile FindName equivalent?) und diesem Thread (WP7.1 Consume OData) ist folgendes herausgekommen J

    [XAML]

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
          <ListBox HorizontalAlignment="Left" Margin="6,116,0,19" Name="lbProducts" Width="450" SelectionChanged="OnListBoxSelectedChanged">
            <ListBox.ItemTemplate>
              <DataTemplate>
                <StackPanel Name="stkPanel" Orientation="Vertical">
                  <TextBlock x:Name="txt1" Text="{Binding ProductName}"/>
                </StackPanel>
              </DataTemplate>
            </ListBox.ItemTemplate>
          </ListBox>
          <Button Content="Get Data" Name="button1" Width="237" Margin="87,6,132,650" Click="button1_Click" />
        </Grid>
      </Grid>
    

     

    [Extensions.cs]

    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.Generic;
    
    namespace WindowsPhoneApplication1
    {
      public static class Extensions
      {
        public static T FindParentOfType<T>(this FrameworkElement element)
        {
          var parent = VisualTreeHelper.GetParent(element) as FrameworkElement;
    
          while (parent != null)
          {
            if (parent is T)
              return (T)(object)parent;
    
            parent = VisualTreeHelper.GetParent(parent) as FrameworkElement;
          }
          return default(T);
        }
    
        // Methods
        public static List<T> GetChildrenByType<T>(this UIElement element) where T : UIElement
        {
          return element.GetChildrenByType<T>(null);
        }
    
        public static List<T> GetChildrenByType<T>(this UIElement element, Func<T, bool> condition) where T : UIElement
        {
          List<T> results = new List<T>();
          GetChildrenByType<T>(element, condition, results);
          return results;
        }
    
        private static void GetChildrenByType<T>(UIElement element, Func<T, bool> condition, List<T> results) where T : UIElement
        {
          for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
          {
            UIElement child = VisualTreeHelper.GetChild(element, i) as UIElement;
            if (child != null)
            {
              T t = child as T;
              if (t != null)
              {
                if (condition == null)
                {
                  results.Add(t);
                }
                else if (condition(t))
                {
                  results.Add(t);
                }
              }
              GetChildrenByType<T>(child, condition, results);
            }
          }
        }
    
        public static bool HasChildrenByType<T>(this UIElement element, Func<T, bool> condition) where T : UIElement
        {
          return (element.GetChildrenByType<T>(condition).Count != 0);
        }
    
    
      }
    }
    

     

    [MainPage.xaml.cs]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using Microsoft.Phone.Controls;
    using System.Xml.Linq;
    using System.IO;
    using System.Xml;
    using System.Windows.Media;
    
    namespace WindowsPhoneApplication1
    {
      public partial class MainPage : PhoneApplicationPage
      {
       
    
        // Constructor
        public MainPage()
        {
          InitializeComponent();
        }
    
        private void button1_Click(object sender, RoutedEventArgs e)
        {
          WebClient wc = new WebClient();
          wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
          wc.DownloadStringAsync(new Uri("http://services.odata.org/OData/OData.svc/Products"));
        }
    
        void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
    
          if (e.Error == null)
          {
            StringReader stream = new StringReader(e.Result);
            XmlReader reader = XmlReader.Create(stream);
    
    
            XDocument root = XDocument.Load(reader);
    
            XNamespace sp = "http://www.w3.org/2005/Atom";
            XNamespace ds = "http://schemas.microsoft.com/ado/2007/08/dataservices";
            XNamespace meta = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
    
            IEnumerable<XElement> _charInfoEl = root.Descendants(sp + "entry");
    
            var _charInfo = from l in _charInfoEl
                    select new Products()
                    {
                      ProductName = l.Element(sp + "title").Value
                    };
    
            lbProducts.ItemsSource = _charInfo;
    
            reader.Close();
            reader.Dispose();
    
            stream.Close();
            stream.Dispose();
            
          }
          
        }
    
        public class Products
        {
          public string ProductName { get; set; }
        }
    
        private void OnListBoxSelectedChanged(object sender, SelectionChangedEventArgs e)
        {
          ListBoxItem item = (ListBoxItem)lbProducts.ItemContainerGenerator.ContainerFromIndex(lbProducts.SelectedIndex);
          TextBlock txt = item.GetChildrenByType<TextBlock>().Where(x => x.Name == "txt1").FirstOrDefault();
          MessageBox.Show(txt.Text);
        }
    
      }
    }
    

     

    Ergebnis: Wenn man auf einem Item aus der ListBox zugreift, springt eine MessageBox auf die den Wert aus dem TextBlock enthaltet (z.B. „LCD HDTV“)

    Interessant noch zum lesen: Phone 7 Series Listbox Example

    Grüße,

    Robert

    Mittwoch, 15. Juni 2011 09:27
  • Hallo peeteepeet,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 13. Juli 2011 09:45