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
에서 상속 :
이 내 컨버터는 모습입니다
변환기를 게시 할 수 있습니까? 제대로 구성했는지 여부는 BooleanToVisibilityConverter 클래스를보고 싶습니다. – MilanG
@MilanG 예, 방금 질문을 업데이트했습니다. – CBreeze
바인딩 컨텍스트가 xaml과 어떻게 연결되어 있습니까? – Stefan