2017-11-23 10 views
1

visibiltiy가 bool에 바인딩되어 있고 변환기가 BoolToVis 인 사각형이 있습니다. 나는 부울에 대한 GET/SET이bool 업데이트시 UI가 업데이트되지 않습니다.

<Rectangle Grid.Row="1" Fill="#FE7200" HorizontalAlignment="Left" Width="5" Visibility="{Binding LocationsClicked, Converter={StaticResource BoolToVis}, Mode=TwoWay}"/> 

:

private bool _locationsClicked; 
public bool LocationsClicked 
{ 
    get => _locationsClicked; 
    set 
    { 
     if (_locationsClicked == value) return; 
     _locationsClicked = value; 
     OnPropertyChanged(nameof(LocationsClicked)); 
    } 
} 

내가 다음 버튼에 바인딩 된 DelegateCommand이를 내가 설정하려는 것으로,이 XAML처럼 보이는 것입니다 true로 사각형의 가시성 :

public DelegateCommand NavigateToLocationsCommand 
{ 
    get 
    { 
     return new DelegateCommand(param => 
     { 
      LocationsClicked = true; 
     }); 
    } 
} 

나는이를 끝까지 디버거를 통해이 LocationsClicked true로 설정되어 있지만 사각형은 가시화되지 않습니다. 나는 모드를 변경 시도, 어떤 이상한 것은 내가 설정 한 경우이다했습니다

private bool _locationsClicked; 

private bool _locationsClicked = true; 

에 사각형이 시작에 볼 수 있습니다. UI를 업데이트하는 명령이 없다는 점에서 어디서 잘못 될까요?

internal class BaseViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

전체 뷰 모델 :

internal class DashboardViewModel : BaseViewModel 
{ 
    private object _selectedViewModel; 

    private bool _jobsClicked = true; 
    private bool _locationsClicked; 
    private bool _clientsClicked; 
    private bool _usersClicked; 

    public DashboardViewModel() 
    { 
     SelectedViewModel = new JobsViewModel(); 
    } 

    #region Get/Set 
    public object SelectedViewModel 
    { 
     get => _selectedViewModel; 
     set 
     { 
      if (_selectedViewModel == value) return; 
      _selectedViewModel = value; 
      OnPropertyChanged(nameof(SelectedViewModel)); 
     } 
    } 

    public bool JobsClicked 
    { 
     get => _jobsClicked; 
     set 
     { 
      if (_jobsClicked == value) return; 
      _jobsClicked = value; 
      OnPropertyChanged(nameof(JobsClicked)); 
     } 
    } 

    public bool LocationsClicked 
    { 
     get => _locationsClicked; 
     set 
     { 
      if (_locationsClicked == value) return; 
      _locationsClicked = value; 
      OnPropertyChanged(nameof(LocationsClicked)); 
     } 
    } 

    public bool ClientsClicked 
    { 
     get => _clientsClicked; 
     set 
     { 
      if (_clientsClicked == value) return; 
      _clientsClicked = value; 
      OnPropertyChanged(nameof(ClientsClicked)); 
     } 
    } 

    public bool UsersClicked 
    { 
     get => _usersClicked; 
     set 
     { 
      if (_usersClicked == value) return; 
      _usersClicked = value; 
      OnPropertyChanged(nameof(UsersClicked)); 
     } 
    } 
    #endregion 

    private void ResetVisibility() 
    { 
     JobsClicked = false; 
     LocationsClicked = true; 
     ClientsClicked = false; 
     UsersClicked = false; 
    } 

    #region Navigation 
    public DelegateCommand NavigateToJobsCommand 
    { 
     get 
     { 
      return new DelegateCommand(param => 
      { 
       SelectedViewModel = new JobsViewModel(); 
       ResetVisibility(); 
       JobsClicked = true; 
      }); 
     } 
    } 

    public DelegateCommand NavigateToLocationsCommand 
    { 
     get 
     { 
      return new DelegateCommand(param => 
      { 
       SelectedViewModel = new LocationsViewModel(); 
       ResetVisibility(); 
       LocationsClicked = true; 
      }); 
     } 
    } 

    public DelegateCommand NavigateToClientsCommmand 
    { 
     get 
     { 
      return new DelegateCommand(param => 
      { 
       SelectedViewModel = new ClientsViewModel(); 
       ResetVisibility(); 
       ClientsClicked = true; 
      }); 
     } 
    } 

    public DelegateCommand NavigateToEmployeesCommand 
    { 
     get 
     { 
      return new DelegateCommand(param => 
      { 
       SelectedViewModel = new UsersViewModel(); 
       ResetVisibility(); 
       UsersClicked = true; 
      }); 
     } 
    } 
    #endregion 
} 
문제

<UserControl.Resources> 
    <BooleanToVisibilityConverter x:Key="BoolToVis"/> 
</UserControl.Resources> 

뷰 모델 (이 전체 클래스) BaseViewModel에서 상속 :

이 내 컨버터는 모습입니다

+0

변환기를 게시 할 수 있습니까? 제대로 구성했는지 여부는 BooleanToVisibilityConverter 클래스를보고 싶습니다. – MilanG

+0

@MilanG 예, 방금 질문을 업데이트했습니다. – CBreeze

+0

바인딩 컨텍스트가 xaml과 어떻게 연결되어 있습니까? – Stefan

답변

1

좋아,이 문제는 내가 찾은이 스타일을 발견했다 에 대해및 MouseLeave이 어떻게 든 사각형을 덮습니다. 여기에 스타일이 있으며 나는 이것을 재고해야합니다 :

<EventTrigger RoutedEvent="MouseEnter"> 
    <BeginStoryboard> 
     <Storyboard> 
      <ColorAnimation To="#FE7200" 
          Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" 
          FillBehavior="HoldEnd" 
          Duration="0:0:0.25"/> 
     </Storyboard> 
    </BeginStoryboard> 
</EventTrigger> 
<EventTrigger RoutedEvent="MouseLeave"> 
    <BeginStoryboard> 
     <Storyboard> 
      <ColorAnimation To="#FF222226" 
          Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" 
          FillBehavior="HoldEnd" 
          Duration="0:0:0.25"/> 
     </Storyboard> 
    </BeginStoryboard> 
</EventTrigger>