我想绑定一个文本框,以显示所选项目下方项目的文本。
示例:
第1项 - 文本=行数字一 第2项 - 文本=第二行第二 第3项 - 文本=第三行
我选择第2项
输出
文本框1 - 文本=第二行(这很容易设置绑定到selecteditem)
文本框2 - 文本=第三行
我在想一个selectedindex + 1的自定义xpath,但这似乎不起作用
答案 0 :(得分:1)
您需要实现IValueConverter
并将其设置为绑定的Converter
属性。
创建一个继承自IValueConverter
的类,并在Convert
方法中,将value
参数转换为ListBox
(因为您将绑定TextBox
本身ListBox
,让转换器将其转换为有意义的内容。
然后获取对ListBox
的{{1}}属性的引用。
您想从方法中返回SelectedIndex
。
您可以保留listBox.Items[selectedIndex + 1]
方法未实现。
您还必须处理选择ConvertBack
中最后一项的情况,因为索引+ 1将超出范围。也许你想要归还第一个项目;也许您想要返回ListBox
或null
。
根据要求,这是一个使用自定义ListBox以及名为“ItemAfterSelected”的附加[Dependency]属性的示例。
首先,派生控件的代码:
string.Empty
这是一个示例窗口,显示如何使用和绑定到控件(您可以将其放入应用程序并运行它以查看它的运行情况。)
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication1
{
public class PlusOneListBox : ListBox
{
public PlusOneListBox()
{
SelectionMode = SelectionMode.Single;
}
public object ItemAfterSelected
{
get { return GetValue(ItemAfterSelectedProperty); }
set { SetValue(ItemAfterSelectedProperty, value); }
}
public static readonly DependencyProperty ItemAfterSelectedProperty = DependencyProperty.Register(
"ItemAfterSelected", typeof (object), typeof (PlusOneListBox));
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
var newly_selected = e.AddedItems;
if (newly_selected == null) ItemAfterSelected = null;
else
{
var last_index = Items.Count - 1;
var index = Items.IndexOf(newly_selected[0]);
ItemAfterSelected = index < last_index
? Items[index + 1]
: null;
}
base.OnSelectionChanged(e);
}
}
}