【发布时间】:2014-04-18 09:43:48
【问题描述】:
我是 Windows Phone 编程的新手,在 ListBox 中编辑数据时遇到问题。
我正在将 XML 文件中的数据加载到列表中,并在 ListBox 中显示它们。
我的 XML 中的每个条目都附加了一个类型。我想通过选中/取消选中某些复选框来删除/添加某些类型的条目。
我发现了这样的东西:
How to remove all ListBox items?
但它并不完全适合我的需要,因为我只想删除部分 ListBox 项目,然后可能只需再次选中复选框即可将其取回。
此外,我不想手动添加每个条目,因为我已经将列表框与包含我的 XML 条目的列表绑定。
我像这样上传我的 XML:
Activity.cs:
namespace ReadXMLfromFile
{
public class Activity
{
public string Type { get; private set; }
public string Description { get; private set; }
public Activity(string type, string description)
{
Type = type;
Description = description;
}
public static List<Activity> LoadActivities(XDocument doc)
{
return doc .Root
.Elements("Activity")
.Select(el => new Activity((string)el.Attribute("Type"),
el.Value))
.ToList();
}
public static List<Activity> LoadActivities()
{
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists("Activities.xml"))
{
using (var stream = store.OpenFile("Activities.xml",
FileMode.Open))
{
return LoadActivities(XDocument.Load(stream));
}
}
}
// No user file... load the default activities
return LoadActivities(XDocument.Load("Assets/Activities.xml"));
}
}
}
这是我的页面代码:
namespace ActivityManager
{
public partial class PivotPage1 : PhoneApplicationPage
{
private List<Activity> activities;
public void ActivityDisplay()
{
activities = Activity.LoadActivities();
listBox1.ItemsSource = activities;
}
public PivotPage1()
{
InitializeComponent();
ActivityDisplay();
}
private void CookingCheck_Checked(object sender, RoutedEventArgs e)
{
}
private void ArtCheck_Checked(object sender, RoutedEventArgs e)
{
}
private void LanguageCheck_Checked(object sender, RoutedEventArgs e)
{
}
private void ScienceCheck_Checked(object sender, RoutedEventArgs e)
{
}
private void SportCheck_Checked(object sender, RoutedEventArgs e)
{
}
ListBox 的 xaml:
<ListBox Height="347" HorizontalAlignment="Left" Margin="27,243,0,0"
Name="listBox1" VerticalAlignment="Top" Width="410"
SelectionChanged="listBox1_SelectionChanged" AllowDrop="False"
ItemsSource="{Binding activities}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="10">
<TextBlock Text="{Binding Activity}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这也是我的 XML 文件
<?xml version="1.0" encoding="utf-8" ?>
<Activities>
<Activity Type="Cooking">
Cook some Mexican food
</Activity>
<Activity Type="Art">
Draw a picture
</Activity>
<Activity Type="Language">
Learn 5 words in Polish you didn't know yet
</Activity>
<Activity Type="Science">
Write a simple program in C
</Activity>
<Activity Type="Sport">
Go to the gym
</Activity>
</Activities>
你能帮帮我吗?我很困惑,可能错过了一些明显的东西。提前谢谢你。
【问题讨论】:
-
请在您检查的事件中放置一个断点,并在 FilterActivity Happend 检查 ItemsSource 不为空并且其中包含对象
-
@verdesrobert 结果在检查事件期间源为空。 FilterActivity 发生后,里面终于有对象了。
标签: c# xml windows-phone-7 listbox