Я нашел миллионы ответов на свои вопросы, но ничего не помогло, может быть, я не вижу простого решения.
В моем приложении MVVM- (Light) я хочу привязать свойство видимости к ViewModel:
<StackPanel Orientation="Horizontal" Visibility="{Binding AddMenuVisibility, Converter={StaticResource BooleanToVisibilityConverter}}">
...
</StackPanel>
Моя ViewModel начинается с:
public class OrderMainViewModel : BaseViewModel
{
public OrderMainViewModel()
{
if (CurrentUser.Default.UserLevel < 5)
{
AddMenuVisibility = false;
}
else
{
AddMenuVisibility = true;
}
}
Свойство:
public const string AddMenuVisibilityPropertyName = "AddMenuVisibility";
private bool _addMenuVisibility = true;
/// <summary>
/// Sets and gets the AddMenuVisibility property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public bool AddMenuVisibility
{
get
{
return _addMenuVisibility;
}
set
{
if (_addMenuVisibility == value)
{
return;
}
_addMenuVisibility = value;
RaisePropertyChanged(AddMenuVisibilityPropertyName);
}
}
Значение по умолчанию для CurrenUser.Default.UserLevel равно 1, поэтому оно достигает значения falseЗначение в первую очередь.Позже он достигает истинного значения, но «реальный» статус видимости в XAML не изменяется.Если я изменю первое объявление на true, оно останется видимым.