Привязка видимости в XAML к свойству Visibility
-
23-08-2019 - |
Вопрос
Я видел в Интернете немало примеров привязки логического значения к свойству Visibility элемента управления в XAML.В большинстве хороших примеров используется преобразователь BooleanToVisibiliy.
Я хотел бы просто установить свойство Visible элемента управления для привязки к свойству System.Windows.Visibility в коде программной части, но, похоже, оно не хочет работать.
Это мой XAML:
<Grid x:Name="actions" Visibility="{Binding Path=ActionsVisible, UpdateSourceTrigger=PropertyChanged}" />
Это код свойства:
private Visibility _actionsVisible;
public Visibility ActionsVisible
{
get
{
return _actionsVisible;
}
set
{
_actionsVisible = value;
}
}
В конструкторе окна у меня также есть такой вызов:
base.DataContext = this;
Когда я обновляю ActionsVisible или this.actions.Visibility, состояние не передается.Есть идеи, что может пойти не так?
Решение
Я думаю, проблема в том, что WPF не может знать, что ваше свойство ActionsVisible изменилось, поскольку вы не уведомили об этом.
Вашему классу потребуется реализовать INotifyPropertyChanged, а затем в методе set для ActionsVisible вам нужно будет запустить событие PropertyChanged с ActionsVisible в качестве измененного имени свойства.
Надеюсь это поможет...
Другие советы
Измените свое свойство на DependencyProperty.Это обеспечит обновление за вас.
public Visibility ActionsVisible
{
get { return (Visibility)GetValue(ActionsVisibleProperty); }
set { SetValue(ActionsVisibleProperty, value); }
}
// Using a DependencyProperty as the backing store for ActionsVisible. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ActionsVisibleProperty =
DependencyProperty.Register("ActionsVisible", typeof(Visibility), typeof(FooForm));
Писать: NotifyPropertyChanged("ActionsVisible")