自定义ListBox WP7

时间:2011-07-19 14:06:30

标签: xml web-services windows-phone-7 listbox

我想在自定义列表中显示之前提取的数据,但我发现提取数据的方法对我来说并不容易,所以我会找到一种方法来显示我的数据而不更改xml读取方法。 这就是我希望我的列表是(xml):

 <ListBox Height="516" HorizontalAlignment="Left" Margin="16,74,0,0" Name="listBox1" VerticalAlignment="Top" Width="430" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Height="132">
                        <Image Source="{Binding  wkpinImage}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/>
                        <StackPanel Width="370">
                            <TextBlock Text="{Binding Day}" Foreground="#FFC8AB14" FontSize="28" />
                            <TextBlock Text="{Binding Low}" TextWrapping="Wrap" FontSize="24" />
                            <TextBlock Text="{Binding High}" TextWrapping="Wrap" FontSize="24" />
                            <TextBlock Text="{Binding Condition}" TextWrapping="Wrap" FontSize="26" />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

这是xml阅读方法(c#):

  while (reader.Read())
            {
                switch (reader.Name)
                {
                    case ("day_of_week"):
                        {
                            listBox1.Items.Add(new ListBoxItem()
                              {
                                  Content = reader.GetAttribute("data")
                              });
                            Day = Content.ToString();
                        } break;

...

2 个答案:

答案 0 :(得分:0)

我建议使用MVVM方法将项目绑定到列表框。

这是一个非常好的教程,介绍如何将MVVM绑定到列表框:

http://www.labo-dotnet.com/post/Creating-your-first-MVVM-silverlight-application-on-windows-phone-7.aspx

关于MVVM有很多好处:

  • 少编码
  • 您的绑定可针对大型数据源进行优化
  • 更容易维护
  • 清洁代码
  • ...

答案 1 :(得分:0)

在我看来,AT ALL的最佳解决方案是XML序列化!

您应该只创建一个可序列化的类 ( REMEMEBER: - 使用基础数据类型(否则你需要翻译属性) - 只能序列化公共属性 - 保持一个没有参数的构造函数 )

...
using System.Xml.Serialization;

public class SerializableClass
{
    [XmlAttribute(AttributeName = "Day")]
    public int Day
    {
        get
        {
            ...
        }
        set
        {
            ...
        }
    }

    [XmlIgnore]
    public CustomEnumerationType PublicPropertyNotToReadWrite
    {
        get
        {
            ...
        }
        set
        {
            ...
        }
    }

    ...
}

使用这些静态方法来序列化(将类的对象输出到SOMETHING [例如XML文件/流])并反序列化(INPUT FROM SOMETHING [例如XML文件/流]到对象的新实例你的班级):

(下一个2静态方法可以从/向隔离存储文件读取/写入可串行化的对象!!)

public static object DeserializeObject(string fileName,Type objectType)         {             使用(IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())             using(IsolatedStorageFileStream fileStream = appStorage.OpenFile(fileName,FileMode.Open,FileAccess.Read))             using(TextReader xmlReader = new StreamReader(fileStream))             {                 XmlSerializer xmlSerializer = new XmlSerializer(objectType);

            return xmlSerializer.Deserialize(xmlReader);
        }
    }

    public static void SerializeObject(string fileName, object target, Type objectType)
    {
        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        using (IsolatedStorageFileStream fileStream = appStorage.OpenFile(fileName, FileMode.Create, FileAccess.Write))
        using (TextWriter xmlWriter = new StreamWriter(fileStream))
        {
            XmlSerializer xmlSerializer = new XmlSerializer(objectType);

            xmlSerializer.Serialize(xmlWriter, target);
        }
    }

在我看来,没有比这种方法更好的了!

我希望这可以帮到你!