使用不同的集合在ViewModel中更改ItemsSource

时间:2014-11-13 13:32:10

标签: c# wpf xaml mvvm windows-phone

我将一个pivot itemsSource设置为我的ViewModel中的OservableCollection属性。当我单击一个按钮时,我希望将枢轴ItemSource绑定到ObservableCollection类型的VM中的另一个属性。在页面的Xaml中,我设置了Pivots的ItemsSource一次,我知道从按钮点击事件的代码隐藏更改它不是一个好方法,而只是改变集合的内容。问题是Type1是Type1而另一个是Type2。如何在ViewModel中执行此操作?

2 个答案:

答案 0 :(得分:0)

在您的viewmodel中,您可以将list属性定义为Object并绑定到该属性,然后在您的命令中切换集合,只需将该对象设置为其他列表。

这是一个简短的例子

    private Object _list;
    private ObservableCollection<Int32> _intList;
    private ObservableCollection<String> _stringList;

    public Object List
    {
        get { return _list; }
        set
        {
            _list = value;
            RaisePropertyChanged("List");
        }
    }

    public void CommandExecuted()
    {
        if (ReferenceEquals(_list, _intList))
        {
            List = _stringList;
        }
        else
        {
            List = _intList;
        }
    }

答案 1 :(得分:-1)

如果将绑定的Item保留为IEnumerable,则应该能够切换集合并通知交换机。         private IEnumerable _boundList;         private ObservableCollection _firstCollection;         private ObservableCollection _SecondCollection;

    public IEnumerable BoundList
    {
        get { return _boundList; }
        set
        {
            _boundList = value;
            OnPropertyChanged("BoundList");
        }
    }

    public void CommandExecuted()
    {
        BoundList = _boundList == _firstCollection ? (IEnumerable)_SecondCollection : _firstCollection;
    }