【问题标题】:ItemsControl DataContext Binding ErrorItemsControl DataContext 绑定错误
【发布时间】: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


【解决方案1】:

您使用什么作为数据上下文/项目源?如果它是我所期望的ObservableCollection,那么您最好绑定到它的“Count”属性,然后在必要时使用触发器折叠文本块。

绑定当前没有更新的原因是DataContext 本身实际上并没有改变。 DataContext 上的属性正在更改,因此如果您绑定到正确的属性(计数),您的绑定将会更新。

这段代码 sn-p 应该可以工作:

<ControlTemplate TargetType="ItemsControl">
  <Grid>
    <TextBlock x:Name="txtBlock" Text="No Items to Display" Visibility="Collapsed" />
    <ItemsPresenter />
  </Grid>
  <ControlTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Count}" Value="0">
      <Setter TargetName="txtBlock" Property="Visibility" Value="Visible"/>
    </DataTrigger>
  </ControlTemplate.Triggers>
</ControlTemplate>  

通过使用数据触发器,您可以避免转换器将数值转换为可见性并将所有内容保存在 .xaml 中。

【讨论】:

  • 完美!这是我正在寻找的确切解决方案!简单干净。非常感谢。
猜你喜欢
  • 2018-10-17
  • 2014-07-30
  • 2010-12-03
  • 2020-04-04
  • 2011-12-04
  • 2011-02-03
  • 1970-01-01
  • 2012-02-08
  • 2012-05-26
相关资源
最近更新 更多