将XAML中的可见性绑定到可见性属性
我在网上看到了很多将布尔值绑定到XAML中控件的可见性属性的示例。大多数优秀的例子都使用了一个BooleanToVisibiliy转换器。将XAML中的可见性绑定到可见性属性
我想设置控件上的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,然后在ActionsVisible的设置方法中,需要使用ActionsVisible作为已更改的属性名称触发PropertyChanged事件。
希望这有助于...
我不反对这样做,但我也有一个TextBox绑定到代码隐藏的字符串属性,并且没有INotifyPropertyChanged事件。我认为通过将UpdateSourceTrigger设置为PropertyChanged,我不需要使用INotifyPropertyChanged。 – Jared 2008-12-21 18:43:49
不知道它是如何做到这一点!你想发布更多的代码吗? UpdateSourceTrigger属性可以控制源(即绑定到的属性)何时被更新。它不会对您的知名度属性产生任何影响。 – 2008-12-21 18:52:27
更改你的财产是一个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")
你必须访问他们所创建的线程上的所有控件。您可以从其他线程更新控件,但必须使用WPF分派器通过UI线程编组更新。这[文章](http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)应该有所帮助。 – 2008-12-22 09:28:37