使用所选项目自定义ObservableCollection

时间:2012-07-23 10:10:45

标签: c# wpf mvvm

我正在尝试实现自定义ObservableCollection,它将具有当前(选定的)项属性,可以直接从XAML绑定这是我到目前为止的示例代码有人能指出我正确的方向吗?这里的想法是将listviews的选定项属性直接设置为其itemsources的Currentitem,并提供将参数作为当前项的Action。此操作将从viewmodel设置。

public class ItemAwareObservableCollection<T> : ObservableCollection<T>
{
    private readonly Action<T> _selectionCallback;
    private T _currentItem;

    public T CurrentItem
    {
        get { return _currentItem; }
        set
        {
            if(_currentItem.Equals(value))
            _currentItem = value;
            OnPropertyChanged(new PropertyChangedEventArgs("CurrentItem"));
            _selectionCallback(value);
        }
    }

    public ItemAwareObservableCollection(Action<T> selectionCallback)
    {
        _selectionCallback = selectionCallback;
    }

    public ItemAwareObservableCollection(Action<T> selectionCallback, IEnumerable<T> collection)
        : base(collection) { _selectionCallback = selectionCallback; }

    public ItemAwareObservableCollection(Action<T> selecytionCallback, List<T> list)
        : base(list) { _selectionCallback = selecytionCallback; }
}

这是viewmodel的示例用法

get { return new ItemAwareObservableCollection<Companies>(onSelecttionchange, Resolve<ICompanyService>().Companies); }

在XAML View中我希望将此集合绑定到Llistview的ItemSource(这完美地运行),但我想将其selecteditem属性绑定到此集合的CurrentItem

2 个答案:

答案 0 :(得分:2)

不,我确实会使用CurrentItemICollectionView并在您的XAML中使用IsSynchronizedWithCurrentItem

答案 1 :(得分:0)

对于您的查询...您是否在WPF中探索SynchronizeWithCurrentItem功能?