【发布时间】:2012-01-19 16:14:53
【问题描述】:
我已经研究过这个解决方案:Show if ItemsControl.ItemsSource is null。 我通过代码隐藏将 ItemsControl 的 DataContext 设置为 ObservableCollection。一切正常,除了它只在加载阶段解决一次。如果项目控件在开始时有几个项目,则文本会消失,但以后不会出现。如果它是空的,文本会出现,但是当我稍后添加项目时它不会消失。我也尝试过 ItemsSource 但没有运气。我知道我现在使用控制模板,我可以使用相对源 TemplatedParent 但我只是想确定一下。经过进一步测试,在我尝试添加/删除列表中的项目后,转换器功能似乎没有激活,即使项目显示在我的 itemscontrol 上。
<ItemsControl x:Name="MedicationList" ItemTemplate="{StaticResource UserTemplate}">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Grid>
<TextBlock Text="No Items to Display" Visibility="{Binding DataContext, ElementName=MedicationList, Converter={StaticResource AnyItemsToVisibilityConverter}}" />
<ItemsPresenter />
</Grid>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
【问题讨论】:
-
你不应该调查一下为什么 DataContext 会发生变化吗?
-
我尝试将我的 Datacontext 分配从 UserControl_Loaded 事件移动到 InitializeComponent();并且 DataContext null 问题消失了。我将断点放入我的转换器函数中,它只在分配期间执行一次,但在我添加/删除项目时从不执行
-
回想起来,我真的不需要转换器。我对任何想法持开放态度。我也在考虑DataTriggers,但我不知道如何实现它。基本上,如果 DataSource 中有 0 个项目是 ObservableCollection
,我只需要 Collaspe TextBlock
标签: c# wpf binding converter itemscontrol