我正在尝试制作一个项目模板,其中我的堆栈面板中的某些字段可以为空。如果它是空的,我想将visiblility设置为崩溃。我尝试过设置触发器,但它似乎不起作用,我对WPF的这一部分不是很熟悉
另外,当我的绑定中的特定值为true时,我想更改此项目背景的颜色。它是一回事吗?
感谢。
答案 0 :(得分:1)
使用ViewModel是解决此类问题的一种方法。
如果您的数据存储在Item类中,您将使ItemViewModel包装Item以在item控件中显示。 ViewModel类将实现更改的INotifyProperty以更新显示,并且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。
答案 1 :(得分:0)
如果要隐藏某个项目的内容为空,则必须重新定义其ControlTemplate
的{{1}}(或ListBoxItem
或其他内容,具体取决于您选择的项目容器重新使用)并使用针对ListViewItem
的触发器,例如:
DataContext
但是,我建议您使用<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
上的Filter
代表直接从视图中排除空白项目,以避免折叠未使用的项目。
例如,要排除null对象,请在后面的代码中使用:
CollectionView