2013-03-27 76 views
2

我有一个名为ObservableCollection<MyClass>myCollection应当绑定两个CollectionViewSource S(AllItemsSelectedItems和)。绑定的ObservableCollection作为源不同CollectionViewSource

AllItems的源属性绑定到myCollectionSelectedItems的来源物业应绑定到myCollection项目,其中IsSelected == true

public class MyClass : INotifyPropertyChanged 
{ 
    //fields and interface implementations 
    public string Name {//proper code}; 
    public bool? IsSelected {//proper code}; 
} 

// some where else in the MainWindow 
AllItems.Source = myCollection; 
SelectedItems.Source = myCollection.Where(input=>input.IsSelected==true); 

问题:加载窗口时每一件事情是确定。但是当myCollection中某些项目的IsSelected值明显变化时,它对SelectedItems没有影响。所以为了克服这个问题,我每次更新IsSelected属性时都会更新SelectedItems的源属性。

问题:我该如何做这些绑定,以便不需要手动更新SelectedItems的源属性?

Thnaks。

回答

1

首先,您应该无条件地删除手动过滤设置,并将其替换为更适合的设置。选择什么来取代主要取决于您所针对的.NET版本。

如果以.NET 4.5为目标,那么简单的解决方案是在集合视图上启用live filtering

对于.NET的早期版本,无论做什么,都需要做一些手动工作,但最好在集合视图上调用Refresh,以重新绑定控件。为此,您应该通过设置来自XAML的Filter事件处理程序来将过滤推迟到收集视图本身。

1

MyClass更改后,您应该提高PropertyChanged Event

如果您已经这么做了,那么应该在Debug模式下查看您的SelectedItems.Source。也许它已经有了正确的价值,但它并没有显示给你。

我的意思是,如果SelectedItems.Source属于一些可见的元素 - 图形用户界面 - 你应该刷新它在屏幕上。导致价值的另一种方式,但不会显示,直到您的屏幕上的元素重新绘制。

+0

通过'正确的代码'我的意思是我知道我应该提高它。 – 2013-04-02 12:59:51

+0

@HosseinNarimaniRad - 比你应该尝试我的建议与调试模式 – MikroDel 2013-04-02 13:01:12

+0

答案是这样的:有没有办法使自动更新,我必须在正确的地方让一些刷新。 – 2013-04-02 13:03:23

相关问题