我有一个带有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数组。你能帮我吗?
答案 0 :(得分:2)
好的,这里有几个问题。
在尝试从数组中获取内容之前,您没有检查索引值。如果没有选择会发生什么,或者如果他们选择最后一行会发生什么?
调用列表框项的ToString()方法将为您提供“System.Windows.Controls.ListBoxItem:Item's Text”
最后,也许最直接回答你的问题的是,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>
请注意,至少您应该在转换器中进行一些错误检查,以检查您的计算索引是否仍在范围内。