2012-01-13 3 views
1

WPF 애플리케이션이 있습니다. 이 애플리케이션의 사용자가 각기 다르며 각 사용자마다 서로 다른 레벨이 있습니다. 높은 수준의 사람들은 일부 메뉴 항목에 액세스하지 못합니다.메뉴 항목 간 전환 WPF?

메뉴 항목을 전환하는 방법이 있습니까? 개별 메뉴 항목의 가시성을 효율적으로 전환하는 방법은 무엇입니까? 이 다른 방법이 있습니까?

답변

3

바인딩 및 변환기를 사용하여이 작업을 수행 할 수 있습니다. 기본적으로 사용 권한 수준을 지정하는 메뉴의 DataContext 속성 (메뉴 항목에 상속 됨)이있는 경우 메뉴 항목의 가시성에 바인딩 할 수 있습니다.

분명히 권한이 암시 적으로 Visibility enum으로 변환 될 수 없으므로 IValueConverter 인터페이스의 구현을 만들어야합니다.이 인터페이스는 현재 사용 권한을 기반으로 권한을 가시성으로 변환하거나 그 반대로 변환해야합니다. 수평. 이것은 또한 현재 사용 권한 수준의 개념을 가진 변환기가 필요하므로 어느 정적 속성에 대한 액세스 권한을 부여하거나 (또는 ​​권장하지 않음) 변환기 인스턴스를 확보해야합니다. 인스턴스 하나만 사용하고 현재 사용 권한 수준을이 인스턴스에 전달합니다.

1

예, Visibility 속성은 MenuItem에서 작동합니다. 당신이 Kaxaml에 아래 코드를 붙여 경우 편집 메뉴가 숨겨져있는 것을 볼 등 도구> 항목 2.

<Menu> 
    <MenuItem Header="_File"/> 
    <MenuItem Header="_Edit" Visibility="Collapsed"/> 
    <MenuItem Header="_Tools"> 
    <MenuItem Header="Item 1"/> 
    <MenuItem Header="Item 2" Visibility="Collapsed"/> 
    <MenuItem Header="Item 3"/> 
    </MenuItem> 
</Menu> 

이다 또한 프로그래밍 Visibility을 변경할 수 있습니다, 또는 재산에에 데이터 바인딩거야 귀하의 뷰 모델.

3

이렇게하는 방법에는 여러 가지가 있습니다. 가시성을 토글하는 것도 한 가지 방법이지만 다른 사람들이 코드를 읽을 수있게하려면 일종의 디자인 패턴을 구현하는 것이 좋습니다.

다음 MVVM 또는 MVC 패턴 중 하나를 제안합니다. 즉, 사용자마다 서로 다른보기를 만들어야합니다.

단순한 메뉴 항목처럼 UI의 해당 부분을 사용자 정의 컨트롤로 분리하고 해당 사용자 정의 컨트롤에서 다른 사용자에 대해 다른 XAML을 사용할 수 있습니다. 그런 다음 코드에서 어떤 사용자가 로그인했는지에 따라 올바른 XAML (보기)을 표시하십시오.