7

我在 Internet 上看到了很多将布尔值绑定到 XAML 中控件的 Visibility 属性的示例。大多数好的示例都使用 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 时,状态不会转移。有什么想法可能会出错吗?

4

3 回答 3

8

将您的属性更改为 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));
于 2008-12-21T21:06:12.370 回答
7

我认为问题在于 WPF 无法知道您的 ActionsVisible 属性已更改,因为您没有通知这一事实。

您的类将需要实现 INotifyPropertyChanged,然后在 ActionsVisible 的 set 方法中,您需要使用 ActionsVisible 作为已更改的属性名称来触发 PropertyChanged 事件。

希望这可以帮助...

于 2008-12-21T18:39:21.137 回答
1

写:NotifyPropertyChanged("ActionsVisible")

于 2010-08-31T12:45:33.837 回答