WPF绑定到ListBox.Items

时间:2012-04-18 21:00:19

标签: c# wpf data-binding

我有一个带有ListBox和Label的简单窗口。我想将Label.Text绑定到ListBox,以便在LabelBox中显示的所选项之后成为listBox的下一个Item。 我尝试使用带有这样的转换器的多重绑定:

 <Label>
      <MultiBinding Converter="{StaticResource myConverter}">
            <Binding ElementName="lbox" Path="Items"/>
            <Binding ElementName="lbox" Path="SelectedIndex"/>
      </MultiBinding>-->
 </Label>    

public class MyConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        object[] items = values[0] as object[];
        int index = (int)(values[1]) + 1;
        return (items[index]).ToString();

    }
  .....
}

但它不起作用。问题是我无法获取ListBoxItems数组。你能帮我吗?

2 个答案:

答案 0 :(得分:2)

好的,这里有几个问题。

  1. 在尝试从数组中获取内容之前,您没有检查索引值。如果没有选择会发生什么,或者如果他们选择最后一行会发生什么?

  2. 调用列表框项的ToString()方法将为您提供“System.Windows.Controls.ListBoxItem:Item's Text”

  3. 最后,也许最直接回答你的问题的是,Items属性不是object [],而实际上是ItemsCollection。您的代码应如下所示:

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        System.Windows.Controls.ItemCollection items = values[0] 
                            as System.Windows.Controls.ItemCollection;
    
        int index = (int)(values[1]) + 1;
    
        ...
    }
    

答案 1 :(得分:1)

您的代码段是否正确?在我看来,你想要SelectedIndex而不是SelectedValue(如果我已经正确理解你的问题)。 也就是说,

 <Label>
      <MultiBinding Converter="{StaticResource myConverter}">
            <Binding ElementName="lbox" Path="Items"/>
            <Binding ElementName="lbox" Path="SelectedIndex"/>
      </MultiBinding>
 </Label> 

请注意,至少您应该在转换器中进行一些错误检查,以检查您的计算索引是否仍在范围内。