我正在开发一个Windows Phone 8应用程序,我有一些我需要处理的数据。我正在阅读网站上的数据,我基本上有4条来自网站的信息。我需要能够在显示之前对这些数据进行一些解析和过滤,所以我想将它添加到某种数组/集合/字典中。
在使用C#WinForms应用程序之前,我只想在内存中创建一个包含4列的DataTable,并为每个条目添加一行。我不认为我可以在Windows Phone上使用DataTables,所以我想知道我可以在内存中存储这些信息的其他方法。该应用程序不存储任何信息,因此我没有必要使用IsolatedStorage进行任何此操作。
我可以使用哪种字典/集合来执行类似于DataTable的操作吗?因为它会让我每次存储4条信息?
谢谢!
答案 0 :(得分:0)
这是XAML的一些开放性问题(因为你真的在问如何使用集合控件以及如何进行绑定)。
基本上,任何集合都可以,然后使用控件绑定到该集合中元素的各种属性。您可以使用ListBox
控件,将其绑定到集合,然后在其中声明ItemTemplate
以绑定到集合中元素内的各种属性。
<ListBox ItemsSource="{Binding Customers}" Margin="0,5,0,10">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Padding="3,0,3,0"
Text="{Binding FirstName}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
<TextBlock Text="{Binding LastName}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
<TextBlock Text=", " FontSize="{StaticResource PhoneFontSizeSmall}"/>
<TextBlock Text="{Binding Address}" FontSize="{StaticResource PhoneFontSizeSmall}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您可以设置页面的DataContext
(或将ListBox
命名为 DataContext
)到具有名为{的属性的对象{1}}您要在列表框中查看的集合,例如:
Customers
我忽略了public MyPage()
{
//...
DataContext = this;
}
public List<Customer> Customers {get;set;}
,我会将其作为练习留给读者。
答案 1 :(得分:0)
如果你需要简单的东西,你可以创建一个保存数据的类:
public class DataFromWebSite
{
public string Name { get; set; }
public int Age { get; set; }
public string Country { get; set; }
public string Telephone { get; set; }
}
在上面的例子中,我使用了一个强类型类,其中每个属性都可以包含精确的值/数据类型。因此,Age
是integer
,而不是string
。
然后,我将创建一个集合对象来保存值:
var list = new ObservableCollection<DataFromWebSite>();
// add items to the list...
list.Add(new DataFromWebSite
{
Name = "John",
Age = 42,
Country = "Antartica",
Telephone = "941223445"
});
list.Add(new DataFromWebSite
{
Name = "Carrol",
Age = 24,
Country = "Atlantis",
Telephone = "100223445"
});
ObservableCollection
适用于UI,其中列表可能会随时间而变化。例如,绑定到ObservableCollection
的ListBox会在添加或删除项目时显示对列表的更改(但如果没有实现Age
,则不会显示INotifyPropertyChange
等属性的更改)。
然后,使用一些LINQ扩展,您可以执行简单/可读的查询:
var greaterThan30 = list.Where(d => d.Age > 30);
foreach (var item in greaterThan30)
{
Debug.WriteLine("{0}-{1}", item.Name, item.Age);
}
上面会生成一个列表,其中只有Age
属性大于30
的对象。
或者您可以使用LINQ:
var greaterThan30 = from d in list
where d.Age > 30
select d;
如果返回的其中一个值是唯一的(例如ID
):
public class DataFromWebSite
{
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Telephone { get; set; }
}
您可以将列表存储为Dictionary<string, DataFromWebSite>
:
var keyed = new Dictionary<string, DataFromWebSite>();
var d = new DataFromWebSite
{
Id = "ABC123-A";
Name = "John",
Age = 42,
Telephone = "941223445"
};
keyed.Add(d.Id, d);
// to get a value back:
if (keyed.ContainsKey("ABC123-A")) {
var d2 = keyed["ABC123-A"];
}
而且,如果你想从词典中获取列表:
var list = keyed.Values.ToArray();