2017-09-17 11 views
0

MainWindow와 MainWindow의 코드에 포함 된 하위 창이 있습니다. 또한 임베디드 서브 윈도우에는 자체 코드 숨김 파일이 있습니다. 메인 윈도우는 사용자가 서브 윈도우에있는 문자열 목록을 두 번 클릭 할 때마다 반영하고자하는 목록 상자를 가지고 있습니다.목록 상자를 WPF의 SortedDictionary에서 항목을 추가하거나 제거 할 때마다 목록 상자를 자동으로 반영하는 방법

어떻게해야합니까? INotifyCollectionChanged를 살펴 보았지만 msdn에 대한 문서는 매우 희소합니다.

도움을 주시면 감사하겠습니다.

답변

0

INotifyCollectionChanged를 구현하는 SortedDictionary 위에 래퍼 클래스를 만들어야합니다.

public class SyncSortedDictionary<T1,T2> : INotifyCollectionChanged, IDictionary<T1,T2> 
{ 
    #region Fields 

    private readonly SortedDictionary<T1,T2> _items; 

    #endregion 

    #region Events 

    public event NotifyCollectionChangedEventHandler CollectionChanged; 

    #endregion 

    #region Notify 

    private void OnCollectionChanged(NotifyCollectionChangedAction action, object item, int index) 
    { 
     OnCollectionChanged(new NotifyCollectionChangedEventArgs(action, item, index)); 
    } 

    private void OnCollectionChanged(NotifyCollectionChangedAction action, object item, int index, int oldIndex) 
    { 
     OnCollectionChanged(new NotifyCollectionChangedEventArgs(action, item, index, oldIndex)); 
    } 

    private void OnCollectionChanged(NotifyCollectionChangedAction action, object oldItem, object newItem, int index) 
    { 
     OnCollectionChanged(new NotifyCollectionChangedEventArgs(action, newItem, oldItem, index)); 
    } 

    private void OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
    { 
     var collectionChanged = CollectionChanged; 

     if (collectionChanged == null) 
      return; 

     collectionChanged(this, e); 
    } 

    #endregion 

    #region Public Methods 

    public void Add(KeyValuePair<T1, T2> item) 
    { 
     int index = _items.Count; 

     _items.Add(item.Key, item.Value); 

     OnCollectionChanged(NotifyCollectionChangedAction.Add, item, index); 
    } 

    #endregion 
} 
+0

감사하지만, 어떻게 MainWindow를에 목록 상자 컨트롤이를 듣거나 결합 않습니다

간단한 예 (물론 당신이 사전의 모든 메소드를 구현해야)? 미안 해요 wpf에 새로 왔어. – quacksquared