2012-04-20 2 views
0

좋아, 내가이 권리를하고 있는지 확인하거나, 힘든 방법으로하고 있는지 알 수있다.복잡 한 INT를 다중 WPF 가시성으로 변환하는 것

처음. 계정 수준이 정수 (0-255)입니다. 각 바이트는 주어진 기능을 사용하도록 설정되어 있습니다. 사용자가 로그인 클래스 ProgramVar.ActiveUser가 당겨와 PHP 비누에서 사용자 로그인 현재로 설정됩니다 때 나는 주어진 바이트 Psudo의 XML 코드

<Button Grid.Column="0" Grid.Row="0" Name="Function" Content="Function 1" Visibility="{Binding UserLevel.Allow1 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="1" Name="Function" Content="Function 2" Visibility="{Binding UserLevel.Allow2 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="2" Name="Function" Content="Function 3" Visibility="{Binding UserLevel.Allow3 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="3" Name="Function" Content="Function 4" Visibility="{Binding UserLevel.Allow4 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="4" Name="Function" Content="Function 5" Visibility="{Binding UserLevel.Allow5 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="5" Name="Function" Content="Function 6" Visibility="{Binding UserLevel.Allow6 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="6" Name="Function" Content="Function 7" Visibility="{Binding UserLevel.Allow7 , UpdateSourceTrigger=PropertyChanged}"/> 
<Button Grid.Column="0" Grid.Row="7" Name="Function" Content="Function 8" Visibility="{Binding UserLevel.Allow8 , UpdateSourceTrigger=PropertyChanged}"/> 

에 가시성을 설정하는 중이 야 인터페이스 (작업)

class ProgramVar : INotifyPropertyChanged 
{ 
    private User _ActiveUser; 
    private Level _UserLevel; 
    public User ActiveUser { get { return this._ActiveUser; } set { _ActiveUser= value; UpdateLevel(); NotifyPropertyChanged("ActiveUser "); } } 
    public Level UserLevel { get { return this._UserLevel; } set { _UserLevel= value; NotifyPropertyChanged("UserLevel"); } } 
    private void UpdateLevel() 
    { 
     UserLevel.Allow1 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 1) UserLevel.Allow1 = Visibility.Visible; 
     UserLevel.Allow2 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 2) UserLevel.Allow2 = Visibility.Visible; 
     UserLevel.Allow3 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 4) UserLevel.Allow3 = Visibility.Visible; 
     UserLevel.Allow4 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 8) UserLevel.Allow4 = Visibility.Visible; 
     UserLevel.Allow5 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 16) UserLevel.Allow5 = Visibility.Visible; 
     UserLevel.Allow6 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 32) UserLevel.Allow6 = Visibility.Visible; 
     UserLevel.Allow7 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 64) UserLevel.Allow7 = Visibility.Visible; 
     UserLevel.Allow8 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 128) UserLevel.Allow8 = Visibility.Visible; 
     NotifyPropertyChanged("UserLevel"); 
    } 
} 
class User 
{ 
    string UserName; 
    string FirstName; 
    int AccountLevel; 
} 
class Level 
{ 
    Visibility Allow1 = Visibility.Visible; 
    Visibility Allow2 = Visibility.Visible; 
    Visibility Allow3 = Visibility.Visible; 
    Visibility Allow4 = Visibility.Visible; 
    Visibility Allow5 = Visibility.Visible; 
    Visibility Allow6 = Visibility.Visible; 
    Visibility Allow7 = Visibility.Visible; 
    Visibility Allow8 = Visibility.Visible; 
} 

지금은 또한 현재의 방법은 적절한 방법이 될 사용, IValueConverters에 대한 것입니다 읽고 있어요, 또는 내가 XAML & CS 파일에 IValueConverts를 사용 하는가?

나는 내가 IValueConvertes를 사용하려고 할 때 같이 작동하고 사용하고있어 현재의 방법은, 내가 (필요한 경우 또는 다른 varables)가 있습니다

+0

구현이 제대로 작동한다면 IValueConverters를 사용하면 상황이 복잡해지기 때문에 좋은 생각이 아닐 것입니다. 이 구현을 고수 할 수 있습니다. 오히려 Visibility의 List 또는 ObservableCollection을 type으로 사용하고 visibilityCollection [index]과 같이 사용했습니다. IValueConverters는 일반적으로 컨트롤 또는 코드 섹션의 표시 여부가 라디오 버튼이나 확인란과 같은 다른 컨트롤의 값에 따라 달라 지거나 다른 간단한 논리 일 때 사용됩니다. –

+0

ActiveLife AccountLevel도 그림으로 가져오고 ViewModel 논리가 가시성 전환으로 전환 될 때 별도의 변환기 클래스가 아닌 ViewModel에 변환기를 작성해야하므로 논리를 사용하여이를 구현하는 것이 어려울 수 있습니다. –

답변

0

여러 가시성을 반환하는 개체를 가져 오는 방법을 보지 못했다 잘못하고있는 일들을 ...

  1. Level.AllowX은 속성이 아닙니다. WPF는 속성이 바인딩에 참여할 것으로 기대합니다.
  2. 속성으로 변환 한 후 AllowX 설정자는 (ProgramVar.UserLevel처럼) PropertyChangedNotifications를 발생시켜야합니다.
  3. NotifyPropertyChanged("ActiveUser ") 뒤에 공백이 있습니다! NotifyPropertyChanged("ActiveUser")이어야합니다.
  4. Visibility 열거 형 값을 이미 설정 했으므로 바인딩에 값 변환기가 필요하지 않다고 생각합니다.
  5. 결국 255 AllowLevel 필드를 만드는 것은 좋지 않습니다. ItemsControlsItemsSourceList<Visibility> 값과 작동하는 방식을 확인하십시오!
관련 문제