我正在尝试制作一个项目模板,其中我的堆栈面板中的某些字段可以为空。当它为空时,我想将可见性设置为折叠。我尝试放置触发器,但它似乎不起作用,我对 WPF 的这一部分不是很熟悉
另外,当绑定中的特定值为真时,我想更改此项目的背景颜色。是一样的吗?
谢谢。
我正在尝试制作一个项目模板,其中我的堆栈面板中的某些字段可以为空。当它为空时,我想将可见性设置为折叠。我尝试放置触发器,但它似乎不起作用,我对 WPF 的这一部分不是很熟悉
另外,当绑定中的特定值为真时,我想更改此项目的背景颜色。是一样的吗?
谢谢。
使用 ViewModel 是解决此类问题的一种方法。
如果您的数据存储在 Item 类中,您将创建一个 ItemViewModel 来包装 Item 以在您的项目控件中显示。ViewModel 类将实现 INotifyProperty 更改以更新显示,并且设置器将引发 PropertyChanged 事件并传递适当的属性名称。您还可以根据需要为尽可能多的相互关联的更改字段引发属性更改事件。
假设您希望 Item.Description 在 Description 为空时显示在折叠字段中。您的 ViewModel 属性可能如下所示
public string Description
{
get { return mItem.Description; }
set { mItem.Description = value; Notify("Description"); Notify("DescriptionVisibility"); }
}
public Visibility DescriptionVisibility
{
get { return string.IsNullOrEmpty(mItem.Description) ? Visibility.Visible : Visibility.Collapsed; }
}
在 XAML 中,将 text 属性绑定到 Description,并将 Visibility 属性绑定到 DescriptionVisibility。
如果要隐藏内容为空的项目,则必须重新定义ControlTemplate
其ListBoxItem
(或ListViewItem
其他取决于您使用的项目容器)并使用以 为目标的触发器DataContext
,例如:
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
但是,我建议您使用您的Filter
委托CollectionView
直接从您的视图中排除您的空项目,以避免折叠未使用的项目。
例如要排除空对象,在你的代码后面,使用:
CollectionViewSource.GetDefaultView(yourCollection).Filter = o => o != null;