繁体   English   中英

ItemsControl DataContext绑定错误

[英]ItemsControl DataContext Binding Error

我已经研究过此解决方案: 显示ItemsControl.ItemsSource是否为null 我通过代码隐藏将ItemsControl的DataContext设置为ObservableCollection。 一切正常,除了在加载阶段仅解析一次。 如果项目控件开始时有几个项目,则文本消失,但以后不再显示。 如果为空,则显示该文本,但是稍后添加项目时该文本不会消失。 我也尝试过ItemsSource,但是没有运气。 我知道目前为止我正在使用控件模板,并且我可以使用相对源TemplatedParent,但我只是想确定一下。 经过进一步测试,即使我的项目控件上显示了项目,在尝试添加/删除列表中的项目后,转换器功能似乎也未激活。

<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 / itemssource? 如果它是我所期望的ObservableCollection ,那么最好将其绑定到其“ Count”属性,然后在必要时使用触发器折叠文本块。

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

此代码段应工作:

<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中的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM