2012-07-23 2 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; } 
} 

이것은 뷰 모델의 샘플 사용입니다 내가 Llistview의 ItemSource (이 완벽하게 작동)이 모음을 결합하고 싶지만, 나는 그것의 selectedItem을 결합하고자하는 XAML보기 내부

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

속성을이 집합의 CurrentItem에 추가하십시오.

+0

에 사용해야합니까? 비슷한 질문이 없습니다. 모든 샘플은 현재 우리가 사용하고있는 별도의 속성을 사용하는 방법을 보여줍니다. 그러나이 접근법을 사용하여 유용한 정보를 제공 할 수 있습니까? –

+0

다른 질문이 있습니다. 제기 한 14 가지 질문 중 4 가지를 수락했습니다. (사람들은 시간을 들여서 도움을 받으면 upvotes & accepts를 알게됩니다.) –

답변

0

쿼리에 ... SynchronizeWithCurrentItem WPF에서 기능을 탐색 했습니까?

+1

그리고 답변에 대한 답변이 아니라 댓글 섹션에 의견을 남기고 싶습니다. 그냥 말해. http://meta.stackexchange.com/q/17447 – SynerCoder

+0

나는 당신의 요지를 보았지만, 내 질문을 검토해 보면, 실제로는 그들 대부분이 대답을 못했고, 그래서 나는 대답하지 않은 것입니다. 정확한 코드를 요구하지 않습니다.이 방법이 현재 항목을 이런 방식으로 구현하는 것이 올바른지 알고 싶습니다. –

+0

아니요, 실제로 [CurrentItem] (http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.currentitem.aspx) [ICollectionView] (http://msdn.microsoft. com/en-us/library/system.componentmodel.icollectionview.aspx) 및 XAML에서 [IsSynchronizedWithCurrentItem] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector .issynchronizedwithcurrentitem.aspx) – SynerCoder

관련 문제