ListBox中的WPF数据绑定错误

ListBox中的WPF数据绑定错误,wpf,data-binding,binding,listbox,ivalueconverter,Wpf,Data Binding,Binding,Listbox,Ivalueconverter,我有一个列表框: <ListBox x:Name="HistogramListBox" Grid.Column="1" Margin="8,2,8,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Template="{StaticResource HistogramListBoxControlTemplate}" ItemContainerStyle="{Stat

我有一个
列表框

<ListBox x:Name="HistogramListBox" Grid.Column="1" Margin="8,2,8,0"
         HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
         Template="{StaticResource HistogramListBoxControlTemplate}"
         ItemContainerStyle="{StaticResource HistogramListBoxItem}"
         ItemTemplate="{DynamicResource BucketTemplate}" />
列表框是一个
int[]

当我执行代码时,它说在Int32上找不到“ItemCount”。我以为它从
列表框中得到了物品数量(我显然错了)

有人能告诉我如何让我的
ValueConverter
知道我在使用什么项目吗

谢谢


Dan

数据模板中项的数据上下文是数据项本身,它是一个
int
。如果要在
列表框中创建属性,则需要访问当前上下文之外的内容。您可以使用
相对资源来执行此操作:

{Binding Items.Count, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}

您可以在绑定时尝试以下操作:

<Binding Path="Items.Count">
    <Binding.RelativeSource>
        <RelativeSource AncestorType="{x:Type ListBox}" />
    </Binding.RelativeSource>
</Binding>

假设第一个转换器参数是图表中的实际值,第二个是直方图对象:

<Rectangle.Height>
  <MultiBinding Converter="{StaticResource HistogramValueToPercentageConverter}">
    <Binding />
    <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type local:Histogram}}" />
  </MultiBinding>
</Rectangle.Height>

这是因为DataContext本身就是整数,至少在您给出的错误消息中是这样


顺便说一下,您通常会使用绑定而不是代码隐藏来设置ListBox的ItemsSource。这使得UI和代码的分离更加清晰。我注意到您的示例代码中没有显示任何
ItemsSource=
,所以我想我应该提到这一点。

我非常确定ListBox没有ItemCount属性,对吗?@Drew:true。我刚刚复制了OP。更新了我的post.Items.Count,它给出了项目总数。我正在列表框中查找它当前所在的项目。谢谢
<Rectangle.Height>
  <MultiBinding Converter="{StaticResource HistogramValueToPercentageConverter}">
    <Binding />
    <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type local:Histogram}}" />
  </MultiBinding>
</Rectangle.Height>