Вопрос

Я видел в Интернете немало примеров привязки логического значения к свойству 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")

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top