2010-06-29 4 views
0

여기 내 상황이 있습니다. 관계의 한면을 편집하는 동안 WPF 앱에서 모델링하려고하는 다 대다 관계가 있습니다. 상황은 여러 그룹에 속한 사용자 집합입니다. 사용자를 편집하는 동안 을 SelectionMode으로 설정하고 Many으로 설정합니다. 사용자가 속한 그룹은 목록보기에서 선택된 항목으로 표시됩니다."읽기 전용"SelectedItem을 사용하는 WPF ListView

문제점 : 모든 사용자가 사용자의 그룹 회원 자격을 수정할 수있는 것은 아닙니다. 그러나 그들은 그것을 볼 수 있어야합니다. 지금까지는 문제가 아닙니다. 물론 변경 사항이 저장 될 때 권한 검사가 실행되기 때문입니다. 그러나 내가하고 싶은 것은 효과적으로 다른 기능을 유지하면서 ListView (적어도 SelectedItem을 수정할 수있는 기능)를 비활성화하는 것입니다 (스크롤링, 특히 머리글을 클릭 할 때 정렬도 구현했습니다). 이렇게하면 사용자가 의도하지 않게 실수로 변경 한 내용을 저장할 수 없으며 나중에 변경 사항을 저장하려고 할 때 오류가 발생할 수 있습니다.

현재 사용자에게 충분한 권한이없는 경우 ListView를 완전히 비활성화 할뿐입니다. 그러나 앞서 언급했듯이 다른 모든 기능 (스크롤링 등)을 효과적으로 사용하지 못하게하므로 사용자 환경 측면에서 차선책입니다. 목록의 항목 수 (현재 수백 개)는 모든 항목을보기 위해 스크롤이 필요합니다.

다양한 마우스 이벤트를 가로 채기 (당분간 대체 입력 액세스 무시) 시도하고 사용자가 ListViewItem을 클릭하고 이벤트를 처리 된 것으로 표시했지만 ListView가 여전히 선택 사항을 수정할 때 처리로 표시했습니다. .

나는 단지 SelectionChanged 이벤트를 처리하고 이전 상태로 복원했지만 약간 과장된 것 같습니다 (그러나 가장 간단한 가장 쉬운 해결책 일 수 있습니다).

누구나이 동작을 수행하는 방법에 대한 의견이 있으십니까?

답변

7

ListViewItems는 사용하지 않도록 설정할 수 있지만 ListView는 그대로 사용 가능하게 설정할 수 있습니다. 그렇게하면 스크롤바가 작동하지만 목록에있는 항목과 상호 작용할 수 없다는 것이 사용자에게 분명합니다. 다음과 같이 ItemContainerStyle을 사용하여 항목을 비활성화 할 수 있습니다.

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="IsEnabled" Value="False"/> 
    </Style> 
</ListView.ItemContainerStyle> 
+0

TargetType은 "TargetType ="{x : Type ListViewItem} "'을 (를) 읽어야합니까? –

+0

@Rob : Style.TargetType과 같이 Type 유형의 속성을 설정할 때 XAML 이름 만 전달하면 파서가이를 변환합니다. http://msdn.microsoft.com/en-us/library/ms753322.aspx – Quartermeister

+0

에서 "Typename-as-String을 지원하는 형식 속성"을 참조하십시오. 이것은 내가 찾고있는 정확한 행동을 제공합니다. 도와 주셔서 감사합니다! –