根据其他ListCollectionView的当前项更新ListcollectionView

时间:2015-06-26 09:02:14

标签: c# wpf mvvm collections

每次选择另一个ListCollection的Item时,我想在列表框中更新ListCollectionView。

我有2个ListViewCollection,SceneCollectionView和ShotCollectionView。我希望基于ShotCollectionView中的属性SceneNumber过滤SceneCollection,但是当我从SceneCollectionView中的一个项目转到另一个项目时,我可以让ShotCollectionView更新。

这是我的ViewModel

public class ShotListViewModel : NotifyUIBase
{
    public ListCollectionView SceneCollectionView { get; set; }
    private Scenes CurrentScene
    {
        get { return SceneCollectionView.CurrentItem as Scenes; }
        set { SceneCollectionView.MoveCurrentTo(value); RaisePropertyChanged(); }
    }

    private ObservableCollection<Shot> _allShots = new ObservableCollection<Shot>();
    public ObservableCollection<Shot> AllShots
    {
        get { return _allShots; }
        set { _allShots = value; RaisePropertyChanged();}
    }

    private ListCollectionView _allShotsCollection;
    public ListCollectionView AllShotsCollection
    {
        get
        {
            if (_allShotsCollection == null)
            {
                _allShotsCollection = new ListCollectionView(this.AllShots);
                _allShotsCollection.Filter = IsSceneNumber;
            }
            return _allShotsCollection;
        }
    }

    private bool IsSceneNumber(object obj)
    {         
        if (obj as Shot != null
           && (obj as Shot).SceneNumber == (SceneCollectionView.CurrentItem as Scene).SceneNumber)
        {
            return true;                
        }
        return false;
    }


    public ShotListViewModel()
    {
        SceneCollectionView = Application.Current.Resources["SceneCollectionView"] as ListCollectionView;
        GetShotList(); //Populates the AllShots Observable collection.

        AddShotCommand = new RelayCommand(AddShot);
        FilterShotsCommand = new RelayCommand(AddShot);
    }

我在这里缺少什么才能使它工作或使用ICollectionViewLiveShaping更好。但我不知道如何实现

1 个答案:

答案 0 :(得分:0)

我不明白你想做什么,但让我们谈一个例子:

让我们说

ListBox1绑定到 ListBox1Items ListBox2绑定到 ListBox2Items

如果您要从ListBox2过滤数据,则必须过滤 ListBox2Items 。怎么做 ?很简单:ListBox1有一个属性 SelectedItem ,你可以绑定它---让我们说--- ListBox1SelectedItem 。每次选择更改时,在 ListBox1SelectedItem 的设置器中,您都可以在 ListBox2Items 上触发过滤器。

希望你理解我所解释的内容。