首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemTemplate TextBlock的问题

ItemTemplate TextBlock的问题
EN

Stack Overflow用户
提问于 2009-10-10 04:17:29
回答 2查看 1.2K关注 0票数 0

我正在尝试创建一个项目模板,其中堆栈面板中的一些字段可以为空。当它为空时,我想将可见性设置为折叠。我试着设置触发器,但似乎不起作用,而且我对WPF的这一部分不是很熟悉

此外,当我的绑定中的特定值为真时,我想要更改此项目的背景颜色。这是同样的事情吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-09 21:55:52

使用ViewModel是解决此类问题的一种方法。

如果您的数据存储在Item类中,则需要创建一个ItemViewModel来包装该项,以便在items控件中显示。ViewModel类将实现INotifyProperty changed以更新显示,而setter将引发传递适当属性名的PropertyChanged事件。您还可以根据需要为任意多个相互关联的已更改字段引发属性更改事件。

假设您希望在Description为空时在折叠的字段中显示Item.Description。ViewModel属性可能如下所示

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2009-10-09 21:51:06

如果您想要隐藏一个内容为空的项目,则必须重新定义其ListBoxItemControlTemplate (或ListViewItem或其他内容,具体取决于您使用的项目容器),并使用针对该DataContext的触发器,例如:

代码语言:javascript
复制
<DataTrigger Binding="{Binding}" Value="{x:Null}">
  <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

但是,我建议您在CollectionView上使用Filter委托直接从视图中排除空项,以避免折叠未使用的项。

例如,要在后台代码中排除空对象,请使用:

代码语言:javascript
复制
CollectionViewSource.GetDefaultView(yourCollection).Filter = o => o != null;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1545844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档