Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 筛选ListBox.ItemsSource中的复选框_C#_Xml_Windows Phone 7_Listbox - Fatal编程技术网

C# 筛选ListBox.ItemsSource中的复选框

C# 筛选ListBox.ItemsSource中的复选框,c#,xml,windows-phone-7,listbox,C#,Xml,Windows Phone 7,Listbox,我对Windows Phone编程非常陌生,在编辑列表框中的数据时遇到问题。 我正在将XML文件中的数据加载到列表中,并在列表框中显示它们。 我的XML中的每个条目都附加了一个类型。我想通过选中/取消选中某些复选框来删除/添加具有特定类型的条目 我发现了这样的东西: 但它并不完全适合我的需要,因为我只想删除部分列表框项目,然后可能只需再次选中复选框即可将其取回。 另外,我不想手动添加每个条目,因为我已经用包含XML条目的列表绑定了listbox 我上传XML的方式如下: Activity.cs

我对Windows Phone编程非常陌生,在编辑列表框中的数据时遇到问题。
我正在将XML文件中的数据加载到列表中,并在列表框中显示它们。
我的XML中的每个条目都附加了一个类型。我想通过选中/取消选中某些复选框来删除/添加具有特定类型的条目

我发现了这样的东西:

但它并不完全适合我的需要,因为我只想删除部分列表框项目,然后可能只需再次选中复选框即可将其取回。
另外,我不想手动添加每个条目,因为我已经用包含XML条目的列表绑定了listbox

我上传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"));

      }
   }
}
名称空间ReadXMLfromFile
{
公共课堂活动
{
公共字符串类型{get;private set;}
公共字符串说明{get;private set;}
公共活动(字符串类型、字符串描述)
{
类型=类型;
描述=描述;
}
公共静态列表加载活动(XDocument文档)
{
返回单据根
.要素(“活动”)
.Select(el=>newactivity((string)el.Attribute(“Type”),
el.价值)
.ToList();
}
公共静态列表加载活动()
{
使用(var store=IsolatedStorageFile.GetUserStoreForApplication())
{
if(store.FileExists(“Activities.xml”))
{
使用(var stream=store.OpenFile(“Activities.xml”),
FileMode.Open)
{
返回LoadActivities(XDocument.Load(stream));
}
}
}
//没有用户文件…加载默认活动
返回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)
        {
        }
命名空间活动管理器
{
公共部分类PivotPage1:PhoneApplicationPage
{
私人名单活动;
公共作废活动显示()
{
activities=Activity.LoadActivities();
listBox1.ItemsSource=活动;
}
公共数据透视图第1页()
{
初始化组件();
ActivityDisplay();
}
私有无效CookingCheck\u已选中(对象发送器,路由目标e)
{
}
已选中私有无效艺术检查(对象发送者,路由目标e)
{
}
私有无效语言检查\u检查(对象发送方、路由目标)
{
}
私有无效科学检查(对象发送方,路由目标e)
{
}
已选中私有void SportCheck(对象发送器,路由目标e)
{
}
和列表框的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>

做些墨西哥菜
画画
学习5个你还不知道的波兰语单词
用C编写一个简单的程序
去健身房

你能帮我吗?我很困,可能错过了一些明显的东西。提前谢谢你。

你应该这样做:
创建筛选器列表。
选中/取消选中复选框时更新筛选器列表,每次更改筛选器时更新列表

private List<Activity> activities;

public void ActivityDisplay()
{
    activities = Activity.LoadActivities();
    FilterActivities();
}

public ObservableCollection<string> ActivityFilter = new ObservableCollection<string>();

private void FilterActivities()
{
    listbox1.ItemsSource = null; //sometimes it makes the difference;
    listBox1.ItemsSource = activities.Where(activity => ActivityFilter.Any(filter => filter == activity.Type) || ActivityFilter.Count == 0);

}

public PivotPage1()
{
    InitializeComponent();
    ActivityFilter.CollectionChanged += ActivityFilter_CollectionChanged;
    ActivityDisplay();
}

void ActivityFilter_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    FilterActivities();
}

private void CookingCheck_Checked(object sender, RoutedEventArgs e)
{
    ActivityFilter.Add("Cooking");
}

private void CookingCheck_Unchecked(object sender, RoutedEventArgs e)
{
    ActivityFilter.Remove("Cooking");
}

//Repeat the procedure for each checkbox
私人列表活动;
公共作废活动显示()
{
activities=Activity.LoadActivities();
过滤活性();
}
公共ObservableCollection ActivityFilter=新的ObservableCollection();
专用空过滤器活动()
{
listbox1.ItemsSource=null;//有时它会起作用;
listBox1.ItemsSource=activities.Where(activity=>ActivityFilter.Any(filter=>filter==activity.Type)| | ActivityFilter.Count==0);
}
公共数据透视图第1页()
{
初始化组件();
ActivityFilter.CollectionChanged+=ActivityFilter\u CollectionChanged;
ActivityDisplay();
}
void ActivityFilter\u CollectionChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
过滤活性();
}
私有无效CookingCheck\u已选中(对象发送器,路由目标e)
{
ActivityFilter.添加(“烹饪”);
}
私有无效CookingCheck\u未选中(对象发送方,路由目标)
{
活动过滤器。移除(“烹饪”);
}
//对每个复选框重复此过程
我在你的ItemTemplate中发现了一个问题使用这个

 <ListBox.ItemTemplate>
     <DataTemplate>
          <StackPanel Margin="10">
               <TextBlock Text="{Binding Description}"/>
          </StackPanel>
     </DataTemplate>
 </ListBox.ItemTemplate>


您好。我尝试使用您的代码并重复了该过程,但不幸的是,它似乎不起作用。这是完整的吗?还是有其他方法需要刷新列表框才能正确显示?因为到目前为止,无论我选中/取消选中什么,列表框似乎都不会受到影响。遗憾的是,它没有解决问题。但是r再次查看代码时,我注意到您在示例中删除了
public void ActivityDisplay
中的
listBox1.itemsource=activities;
。当我这样做时,活动列表根本没有加载。是否有可能
listBox1.itemsource=activities有问题。在哪里(activity=>ActivityFilter.Any(filter=>filter==activity.Type)| | ActivityFilter.Count==0)
?@Tajgun92我一开始忘了绑定它,现在它又绑定正确了,但遗憾的是,这个问题在我这方面没有得到解决。对于listbox,复选框仍然不起作用。更改ItemTemplate所做的只是从listbox中删除类型,只留下描述。请在选中的事件和FilterActivity之后放置一个断点偶然检查ItemsSource不为null并且在中包含对象it@verdesrobert在检查事件期间,源为空。发生FilterActivity后,有