我正在尝试创建一个项目模板,其中堆栈面板中的一些字段可以为空。当它为空时,我想将可见性设置为折叠。我试着设置触发器,但似乎不起作用,而且我对WPF的这一部分不是很熟悉
此外,当我的绑定中的特定值为真时,我想要更改此项目的背景颜色。这是同样的事情吗?
谢谢。
发布于 2009-10-09 21:55:52
使用ViewModel是解决此类问题的一种方法。
如果您的数据存储在Item类中,则需要创建一个ItemViewModel来包装该项,以便在items控件中显示。ViewModel类将实现INotifyProperty changed以更新显示,而setter将引发传递适当属性名的PropertyChanged事件。您还可以根据需要为任意多个相互关联的已更改字段引发属性更改事件。
假设您希望在Description为空时在折叠的字段中显示Item.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。
发布于 2009-10-09 21:51:06
如果您想要隐藏一个内容为空的项目,则必须重新定义其ListBoxItem的ControlTemplate (或ListViewItem或其他内容,具体取决于您使用的项目容器),并使用针对该DataContext的触发器,例如:
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>但是,我建议您在CollectionView上使用Filter委托直接从视图中排除空项,以避免折叠未使用的项。
例如,要在后台代码中排除空对象,请使用:
CollectionViewSource.GetDefaultView(yourCollection).Filter = o => o != null;https://stackoverflow.com/questions/1545844
复制相似问题