Привязка видимости в XAML к свойству видимости - PullRequest
7 голосов
/ 21 декабря 2008

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

В конструкторе Window у меня также есть этот вызов:

base.DataContext = this;

Когда я обновляю ActionsVisible или this.actions.Visibility, состояние не переносится. Есть идеи, что может пойти не так?

Ответы [ 3 ]

8 голосов
/ 22 декабря 2008

Измените свою собственность на 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));
7 голосов
/ 21 декабря 2008

Мне кажется, проблема в том, что WPF не может знать, что ваше свойство ActionsVisible изменилось, поскольку вы не уведомили об этом факте.

Вашему классу нужно будет реализовать INotifyPropertyChanged, затем в вашем методе set для ActionsVisible вам нужно запустить событие PropertyChanged с ActionsVisible в качестве имени свойства, которое изменилось.

Надеюсь, это поможет ...

1 голос
/ 31 августа 2010

Запись: NotifyPropertyChanged("ActionsVisible")

...