2010-03-04 6 views
0

WPF listview가 있으며 한 열에 하나 이상의 ListBox가 포함될 수 있습니다.여러 ListBox가 SelectedItem을 ViewModel의 동일한 속성에 바인딩합니다.

ListBox를 마우스 오른쪽 단추로 클릭하면 각 항목에 DelegateCommand가있는 상황에 맞는 메뉴가 작성됩니다. 현재 대리자 명령은 어떤 ListBox를 마우스 오른쪽 단추로 클릭했는지 알아야하므로 페이지 뷰 모델 자체에서 SelectedListBox 속성에 명령 매개 변수를 설정하고 있습니다.

그러나 이것은 별개의 동작으로 이어지고 있습니다. 이것은 여러 ListBox를 동일한 페이지 수준 속성 (SelectedListBox)에 바인딩하기 때문입니다. 다음과 같이

목록보기에 대한 셀 서식 관련 XAML은 다음과 같습니다

<DataTemplate x:Key="MultipleListBoxCellTemplate"> 
    <ListBox SelectedItem="{Binding Path=DataContext.SelectedListBox, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" /> 
</DataTemplate> 

내 뷰 모델에 마우스 오른쪽 버튼으로 클릭 된 목록 상자 얻을 수있는 더 나은 방법이 있나요, 또는 사람이 다른 방법을 생각할 수 ? 많이 감사드립니다 :)

답변

0

컨텍스트 메뉴를 작성할 때 어떤 목록 상자가 선택되었는지 알고 있습니까? 아마도 ICommand에서 컨텍스트 항목을 바인딩하고있는 내용으로 마무리 할 것입니다. 이렇게하면 각 명령은 작성된 ListBox를 정확히 알고 거기에서 선택한 항목을 가져올 수 있습니다.

데이터를보기에서 ViewModel로만 흐르게하기 위해 바인딩을 OneWayToSource로 변경하여 SelectedItem을 사용하여 문제를 해결할 수 있습니다. 현재 문제가 있다고 생각되는 타이밍 문제가있을 수 있지만 정확히 무슨 일이 일어나고 있는지에 따라 문제가 해결 될 수 있습니다.

관련 문제