【发布时间】:2020-03-11 16:35:18
【问题描述】:
我最近创建了一个用户控件,用于通知用户他有多少通知。因为我希望这个用户控件只在有任何通知时才显示自己,所以我创建了一个绑定到布尔值的 DataTrigger,并在没有通知时将可见性设置为折叠。它在开始时工作正常,我的用户控件已折叠,但在我的程序中,我添加了一个通知并在我的 bool 上调用 NotifyPropertyChanged,但由于某些未知原因,用户控件仍然保持隐藏状态。
用户控制
<UserControl.Style>
<Style TargetType="{x:Type UserControl}">
<Setter Property="Visibility"
Value="Visible">
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding HasNotifications}"
Value="False">
<Setter Property="Visibility"
Value="Collapsed">
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Style>
数据上下文
private ObservableCollection<Notification> notifications;
public ObservableCollection<Notification> Notifications
{
get { return notifications; }
}
public bool HasNotifications
{
get
{
return Notifications.Count > 0;
}
}
public void AddNotification(Notification notificationToAdd)
{
notifications.Add(notificationToAdd);
NotifyPropertyChanged(nameof(Notifications));
NotifyPropertyChanged(nameof(HasNotifications));
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
我还尝试使用相反的值设置 DataTrigger(当 HasNotifications 为 true 时将可见性设置为开启),但对我来说也没有成功。
【问题讨论】:
-
不确定为什么它不起作用,但您甚至可能不需要该属性。带有
Binding="{Binding Notifications.Count}" Value="0"的 DataTrigger 也应该可以工作。 -
感谢您的建议!摆脱 HasNotifications,现在我绑定到计数。出于某种奇怪的原因,这也解决了我的问题,现在我的控件崩溃并正确重新出现。我仍然很好奇为什么 DataTrigger 不能与我的 bool 一起使用。
-
Binding Notifications.Count在您的类中没有实现 INotifyPropertyChanged 的情况下工作,因为在这种情况下,实现它的是 ObservableCollection。
标签: c# wpf xaml datatrigger