Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 在筛选这个可观察的集合时,我是否遗漏了什么?_C#_Windows Phone 7 - Fatal编程技术网

C# 在筛选这个可观察的集合时,我是否遗漏了什么?

C# 在筛选这个可观察的集合时,我是否遗漏了什么?,c#,windows-phone-7,C#,Windows Phone 7,我有一个从xml提要解析数据的例程 ... matches.Add(_item); } 在这之后不久,我只想包括与where子句匹配的项 if (this.MatchType == FixtureType.Played) { matches = matches.ToList().Where( m => m.matchResult == "D" ).ToObservableCollection(); } 在此之后,

我有一个从xml提要解析数据的例程

    ...

    matches.Add(_item);
}
在这之后不久,我只想包括与where子句匹配的项

if (this.MatchType == FixtureType.Played)
{
    matches = matches.ToList().Where(
        m =>
            m.matchResult == "D"
    ).ToObservableCollection();
}
在此之后,如果我设置断点,我会注意到匹配项现在包含我要查找的项


现在的问题是,绑定到ObservaleCollection的控件仍然具有初步数据。

问题是,在此场景中有2个
ObservaleCollection
实例

  • 控件绑定到的原始控件
  • 您通过调用
    ToObservableCollection
    创建的新集合
为了获得要在控件中显示的新结果,需要将其重新绑定到新的
ObservableCollection
实例。这将导致无法内联修改原始实例

var results = matches.Where(m => m.matchResult == "D").ToList();
matches.Clear();
foreach (var cur in results) {
  matches.Add(cur);
}

问题是,在这个场景中有2个
ObservableCollection
实例

  • 控件绑定到的原始控件
  • 您通过调用
    ToObservableCollection
    创建的新集合
为了获得要在控件中显示的新结果,需要将其重新绑定到新的
ObservableCollection
实例。这将导致无法内联修改原始实例

var results = matches.Where(m => m.matchResult == "D").ToList();
matches.Clear();
foreach (var cur in results) {
  matches.Add(cur);
}

这是因为您的控件重新绑定到
matches
的旧实例,您正在创建一个新的可观察集合并将其分配给
matches
,但是您的控件没有绑定到
matches
变量,而是绑定到
matches
时的值。您应该改为修改匹配项并删除所有与您的条件不匹配的项。

这是因为您的控件重新引用了
matches
的旧实例,您正在创建一个新的可观察集合并将其分配给
matches
,但您的控件未绑定到
matches
变量,但与绑定时的值
匹配。您应该改为修改匹配项并删除所有与您的条件不匹配的项。

我想问您为什么要绑定一个编程变量

使用MVVM框架(如MVVM Light)可以很好地分类这些场景

只要在视图模型中有一个属性并将您的视图绑定到该属性,当您更新视图模型时,页面将自动更新


有很多这样的例子,包括开发工具中的数据绑定模板(实现基本notifypropertychanged行为),更好的方法是升级到MVVM light(http://mvvmlight.codeplex.com)或者更进一步的是像卡尔伯恩这样的(http://caliburnmicro.codeplex.com/)

我想问,为什么要绑定一个编程变量

使用MVVM框架(如MVVM Light)可以很好地分类这些场景

只要在视图模型中有一个属性并将您的视图绑定到该属性,当您更新视图模型时,页面将自动更新


有很多这样的例子,包括开发工具中的数据绑定模板(实现基本notifypropertychanged行为),更好的方法是升级到MVVM light(http://mvvmlight.codeplex.com)或者更进一步的是像卡尔伯恩这样的(http://caliburnmicro.codeplex.com/)

@HiTechMagic是的,这是一个有效的解决方案。确实如此,但通常最好将集合公开为只读属性以完全避免问题。@HiTechMagic是的,这是一个有效的解决方案。实际上,通常最好将集合作为只读属性公开,以完全避免问题。我需要将项目升级到mvvmlight以正确理解它。我需要将项目升级到mvvmlight以正确理解它。