我在我的UI中有一个函数,我希望能够根据我的窗口对象中的自定义属性的值折叠/使文本消息可见。
使用在线引用,我想出了这个代码隐藏来注册属性:
public bool ValidInterval
{
get { return pValidInterval; }
}
private bool pValidInterval = true;
public static readonly DependencyProperty ValidIntervalProperty = DependencyProperty.Register("ValidInterval", typeof(bool), typeof(Settings), new UIPropertyMetadata(true));
标签对应的XAML:
<Label Name="DynamicWarning" Content="Time interval must be a valid positive integer.">
<Label.Style>
<Style TargetType="Label">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ValidInterval}" Value="true">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding ValidInterval}" Value="false">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
不幸的是,这不起作用。我可以让它根据属性的初始值设置参数,但不像我想的那样动态更新可见性。我已经看了一个小时了,我所看到的似乎与我在网上找到的类似操作的例子一致。是我做错了什么,还是你不能在飞行中更新能见度?如果是后者,如何达到同等的效果?
ΩmegaMan的答案是正确的。但是我想澄清一下,你不需要一个带依赖属性的后备字段,静态依赖属性就是后备字段。
public bool ValidInterval
{
get { return (bool)GetValue(ValidIntervalProperty); }
set { SetValue(ValidIntervalProperty, value); }
}
然而,如果你不是特别需要一个依赖对象,那么你可能只是想使用INotifyPropertyChanged,因为ΩmegaMan有它的权利。依赖属性通常在需要将另一个属性绑定到它们时使用,例如在制作自己的自定义控件时。例如,可视性本身是你的例子中的依赖属性,而ValidInterval只需要是一个调用NotifyPropertyChanged事件的普通属性。
您需要为绑定到页面的属性的持有人class
,坚持INotifyPropertyChanged Interface并实现它。
该进程通知页面上的绑定控件发生了更改,当它发生更改时,该控件将被"通知"。变化的;然后重新读取它所绑定的属性。
对于WPF/Xaml,它们指定了从视图到业务逻辑的数据关注点的分离,通过实现模型-视图-视图模型或MVVM模式来完成。
提供的链接是干的,还有其他资源可以在网上描述,但它只是说把你所有的业务逻辑从视图绑定到一个单独的视图模型类;
我提供了一个基本的例子,任何版本的。net都可以使用,在我的博客上:
MVVM简单绑定示例