2012-07-23 88 views
0

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

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; } 
} 

,这是从视图模型样本使用

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

内XAML浏览我想这个集合绑定到Llistview的的ItemSource(这完美的作品),但我想它的selectedItem属性绑定property to CurrentItem of this collectiion

+0

你是什么意思?没有类似的问题,所有样本都显示了如何使用目前我们正在使用的单独属性,但是我们希望采用这种方法,那么您是否可以向我们提供有用的信息? – 2012-07-23 10:16:57

+0

他意味着你的其他问题。你只接受了你提出的14个问题中的4个。 (当人们花时间帮助时,人们会赞赏并赞同) – 2012-07-23 10:20:01

回答

0

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

+1

那么您如何在评论部分发表评论,而不是在您的回答中发表评论?只是说。 http://meta.stackexchange.com/q/17447 – SynerCoder 2012-07-23 10:21:56

+0

我明白了你的观点,但是如果你检查我的问题,你会发现实际上他们中的大多数人都没有回答,这就是为什么我没有将他们标记为回答。我不是在这里要求确切的代码所有我想知道的是,如果这种方法是正确的以这种方式实现当前项目? – 2012-07-23 10:24:30

+0

不,我确实会使用[ICollectionView](http://msdn.microsoft.com/zh-cn/)的[CurrentItem](http://msdn.microsoft.com/zh-cn/library/system.componentmodel.icollectionview.currentitem.aspx)。 com/en-us/library/system.componentmodel.icollectionview.aspx)并在您的XAML中使用[IsSynchronizedWithCurrentItem](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.primitives.selector .issynchronizedwithcurrentitem.aspx) – SynerCoder 2012-07-23 10:31:02