Binding Values ​​Not Displayed in ListBox (silverlight 3)

I am loading values ​​for a list from an XML file. What is my problem: I cannot get bindings to show the values ​​of the class properties to which each element is assigned. When I set Text this way:

<TextBlock Text="{Binding }" Style="{StaticResource TitleBlock}"></TextBlock>

Elements show the value of the toString class, but if I use:

 <TextBlock Text="{Binding Title}" Style="{StaticResource TitleBlock}"></TextBlock>

I get blank space for each item in the list. I hope I have explained my problem well enough. Code below:

MapList.xml

<Maps>
 <map>
  <title>Backlot</title>
  <id>mp_backlot</id>
  <description>Daytime urban combat.</description>
  <thumbnail>mapImages/map11.jpg</thumbnail>
 </map>
 <map>
  <title>Bloc</title>
  <id>mp_bloc</id>
  <description>Snowy close quarters combat with some sniping available.</description>
  <thumbnail>mapImages/map11.jpg</thumbnail>
 </map>
 <map>
  <title>The Bog</title>
  <id>mp_bog</id>
  <description>Night time map great for any play style.</description>
  <thumbnail>mapImages/map11.jpg</thumbnail>
 </map>
</Maps>

MainPage.xaml:

    <UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" x:Class="Cod4ServerTool.MainPage" Height="521" Width="928">


  <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="0"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
   <Grid.Background>
    <ImageBrush Stretch="Uniform" ImageSource="ui_bg.jpg"/>
   </Grid.Background>
   <controls:TabControl Margin="0,8,0,0" Grid.Row="1">
    <controls:TabControl.Background>
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
      <GradientStop Color="White" Offset="0"/>
      <GradientStop Color="#662A2C12" Offset="1"/>
     </LinearGradientBrush>
    </controls:TabControl.Background>
    <controls:TabItem Header="TabItem" Foreground="Black">
     <Grid>
      <ListBox x:Name="MapsList_lb" Margin="8,8,177,8">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Image Source="{Binding ThumbNail}" Style="{StaticResource ThumbNailPreview}"></Image>
                                    <TextBlock Text="{Binding Title}" Style="{StaticResource TitleBlock}"></TextBlock>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                        <ListBox.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
         <GradientStop Color="#66F0F2F0" Offset="0.254"/>
         <GradientStop Color="#CC828C82" Offset="1"/>
         <GradientStop Color="#CCD5DED6"/>
        </LinearGradientBrush>
       </ListBox.Background>
      </ListBox>
      <ListBox Margin="0,8,8,8" HorizontalAlignment="Right" Width="160">
       <ListBox.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
         <GradientStop Color="#66F0F2F0" Offset="0.254"/>
         <GradientStop Color="#CC828C82" Offset="1"/>
         <GradientStop Color="#CCD5DED6"/>
        </LinearGradientBrush>
       </ListBox.Background>
      </ListBox>
     </Grid>
    </controls:TabItem>
    <controls:TabItem Header="TabItem">
     <Grid/>
    </controls:TabItem>
   </controls:TabControl>
   <Button Height="21" HorizontalAlignment="Right" Margin="0,8,8,0" VerticalAlignment="Top" Width="95" Content="Import Maps" Grid.Row="1" Click="Button_Click"/>
    </Grid>
    </UserControl>

.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 System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using System.Xml.Linq;

namespace Cod4ServerTool
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DisplayMaps("MapList.xml");
        }

        private void DisplayMaps(string xmlContent)
        {
            XDocument xmlMaps = XDocument.Load(xmlContent);

            var maps = from map in xmlMaps.Elements("Maps").Elements("map")
                          select new Map
                          {
                              Id = map.Element("id").Value,
                              Title = map.Element("title").Value,
                              Description = map.Element("description").Value,
                              ThumbNail = map.Element("thumbnail").Value,
                          };

            MapsList_lb.SelectedIndex = -1;
            MapsList_lb.ItemsSource = maps;
        }
    }
}

Map.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cod4ServerTool
{
    class Map
    {
        public string Title { get; set; }
        public string Id { get; set; }
        public string Description { get; set; }
        public string ThumbNail { get; set; }

        public override string ToString()
        {
            return Title;
        }
    }
}
+3
source share
2 answers

I would make a variable mapsin Listby simply adding .ToList ();

    private void DisplayMaps(string xmlContent)
    {
        XDocument xmlMaps = XDocument.Load(xmlContent);
        var maps = (from map in xmlMaps.Elements("Maps").Elements("map")
                      select new Map
                      {
                          Id = map.Element("id").Value,
                          Title = map.Element("title").Value,
                          Description = map.Element("description").Value,
                          ThumbNail = map.Element("thumbnail").Value,
                      }).ToList();
        MapsList_lb.SelectedIndex = -1;
        MapsList_lb.ItemsSource = maps;
    }

Edit

D'! public. .

ToList - , ItemsSource List<Map>, LINQ, XObject s.

+1

INotifyPropertyChanged Map:

public class Map : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _Title;
    public string Title
    {
        get { return _Title; }
        set
        {
            _Title = value;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("Title"));
            }
        }
    }    
    ...
}

.

Update:

.

0

Source: https://habr.com/ru/post/1725120/


All Articles