2008-09-18 2 views
1

많은 ListView 컨트롤이있는 창에 WPF 앱이 있습니다.이 컨트롤은 모두 다른 CollectionView에 바인딩됩니다.WPF를 결정하는 방법 Window 용 SelectedItem

창 수준에서 현재 포커스 목록 기반 컨트롤에 대해 현재 선택된 항목을 가져 오는 방법이 있습니까? 나는 포커스 요소를 찾고 꽤 간단한 코드를 사용하여이 작업을 수행 할 수 있지만 WPF는이 개념을 상자에서 벗어난 개념으로 지원합니까?

Window.CurrentSelectedDataItem과 같은 것이 좋습니다. 현재 선택된 데이터 항목을 기반으로 명령을 비활성화 할 수 있도록 명령 관리를 중앙 집중화하는 방법으로이 방법을 사용하려고합니다.

감사합니다, 존

답변

1

내가 지정한 같은 속성이 있다고 생각하지 않지만, 대신 당신이 당신의 창 클래스의 ListBox.SelectionChanged 이벤트에 대한 ClassHandler을 등록 할 수 있습니다 :

EventManager.RegisterClassHandler(typeof(ListBox), ListBox.SelectionChanged, 
    new SelectionChangedEventHandler(this.OnListBoxSelectionChanged)); 

응용 프로그램의 ListBox에서 선택 항목이 변경 될 때마다 호출됩니다. 보낸 사람 인수를 사용하여 선택 항목을 변경 한 ListBox를 판별하고 필요할 때이 값을 캐시 할 수 있습니다.

0

나는이 시도하지 않은,하지만 당신은 올바른 항목에 도착하는 컨버터와 MultiBinding을 사용하여 시도해 볼 수도 있습니다 : 첫 번째에 해당하는 경우

<MultiBinding Converter="{StaticResource coalesce}"> 
    <MultiBinding.Bindings> 
     <MultiBinding Converter="{StaticResource nullIfFalse}"> 
      <MultiBinding.Bindings> 
       <Binding ElementName="List1" Path="HasFocus" /> 
       <Binding ElementName="List1" Path="SelectedItem" /> 

nullIfFalse가, 두 번째 매개 변수를 반환, 그렇지 않은 경우는 null. coalesce은 첫 번째 null이 아닌 요소를 반환합니다.