简体   繁体   中英

How to do Data Binding for Textblock within a LongListselector in windows phone app?

Hi, I am trying to bind the data for text block within a LongListSelector . But I am not getting any Output for it, kindly help me.

This is my XAML code:

<phone:LongListSelector ItemsSource="{Binding ''}"  x:Name="longListSelector" HorizontalAlignment="Left" Height="680" VerticalAlignment="Top" Width="446"  >
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                <TextBlock Name="name" Text="{Binding DataContext.TextContent,ElementName=page,Mode=OneWay}" Height="100" Width="100" HorizontalAlignment="Center">

                        </TextBlock>
                        </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>

In the C# code I have parsed data which i need to display in the windows phone, in a menu format. Part of C# code is shown below:

 XDocument document = XDocument.Parse(e.Result);
            var data1 = from query in document.Descendants("location")
                        select new Data
                        {
                            Lat = (string)query.Element("lat"),
                            Lag = (string)query.Element("lng")

                        };
            foreach (var d in data1)
            {
                JsonParsing(d.Lat, d.Lag);
            }
            data1 = from query in document.Descendants("result")
                    select new Data
                    {
                        Country = (string)query.Element("formatted_address")
                    };
            foreach (var d in data1)
            {
               // ob.JsonParsing(d.Lat, d.Lag);
                //XmlParsing(d.Lat, d.Lag);
                val = d.Country;
                //listbox.Items.Add(val);
                //StringsList.Add(val);

                 TextContent=val;

I want the value of the country to be shown inside the textblock, kindly help me figure this out as I am pretty new to this field, thanks.

try like this a good reference

 <DataTemplate>
  <StackPanel VerticalAlignment="Top">
     <TextBlock Text="{Binding Value}" />
  </StackPanel>

</LongListSelector>

CodeBehind

 **Add a public property only public property can be participate in databinding**

   #region Public Properties


  private ObservableCollection<YourModel> _collectionofValue;

    public ObservableCollection<YourModel> CollectionofValues
    {
        get
        {

            return _collectionofValue;
        }
        set
        {
            _collectionofValue=value;
            raisepropertyChanged("CollectionofValues");
        }
    }

   private string _value;

    public string Value
    {
        get
        {
            return _errorMessage;
        }
        set
        {
            _errorMessage = value;
            RaisePropertyChanged("Value");
        }
    }
    #endregion

   **Set value to this public property when you get value**


// for single values
public void getValue()
{
  value =GetXmlValue(); // your method that will return the value;
}

//  as it is a collection 
 public void getValuestoCollection()
{
   Collection.Add(new YourModel(value="SampleValue1");
 Collection.Add(new YourModel(value="SampleValue1");
 Collection.Add(new YourModel(value="SampleValue1");
  Collection.Add(new YourModel(value="SampleValue1");
}

YourModel

   // the collection of this model is binded to the LongListSelector.
    public class ModelName
    {
       public string Values {get;set;}
    }

reference

<phone:LongListSelector ItemsSource="{Binding Items}"  x:Name="longListSelector" HorizontalAlignment="Left" Height="680" VerticalAlignment="Top" Width="446"  >
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                <TextBlock Name="name" Text="{Binding Path=TextContent}" Height="100" Width="100" HorizontalAlignment="Center">

                        </TextBlock>
                        </StackPanel>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
        </phone:LongListSelector>

Your C# algm should be:

i) Have a viewmodel class

public class MyViewModel
{
public ObservableCollection<MyDataItem> Items {get; set;}

public MyViewModel()
{
Items=new ObservableCollection<MyDataItem>();

loop //add your items to your 'Items' property so that you can bind this with LongListSelector ItemsSource
{
Items.Add(new MyDataItem("mystring"));
}

}



}

public class MyDataItem 
{
public MyDataItem(string s)
{
TextContent=s;
}

public string TextContent {get;set;}
}

ii) Create an instance to ViewModel class and set DataContext // write this in the constructor of the page which contains the LongListSelector

public MyViewModel vm;

constructor()
{
vm=new MyViewModel();
this.DataContext=vm;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM