我试图绑定集合中的一个项目,但是该项目的索引需要是“变量”。 例如,采用以下伪代码语法:
<TextBlock Text="{Binding Fields[{Binding Pos}]}" />
类似这样的事情是否可能?如果我的属性Pos为1,则应该绑定到集合“Fields”中的第一项,如果我的Pos为3,则应该绑定到集合中的第三项。我将我的问题简化为这种情况...
这样的做法是否可行,如何实现?
我试图绑定集合中的一个项目,但是该项目的索引需要是“变量”。 例如,采用以下伪代码语法:
<TextBlock Text="{Binding Fields[{Binding Pos}]}" />
类似这样的事情是否可能?如果我的属性Pos为1,则应该绑定到集合“Fields”中的第一项,如果我的Pos为3,则应该绑定到集合中的第三项。我将我的问题简化为这种情况...
这样的做法是否可行,如何实现?
是的,这是可能的。您应该实现绑定转换器,将集合转换为集合项,并将索引作为转换器参数。然后您将像这样使用它:
<TextBlock Text="{Binding Fields,
Converter={StaticResource CollectionToItemConverter,
ConverterParameter={Binding Pos}}}" />
class myCollection
{
private string _current;
public string CurrrentField
{
get { return _current; }
}
// TODO: Set current item to whatever the current item is...
}
编辑:
在这种情况下,我认为您需要创建一个帮助类来跟踪数据网格中的列,并将其与集合中的项目对齐,以便绑定到 UI 的属性可以正确更新。
首先填充集合,然后您就知道其中有多少项,然后使用帮助类循环遍历集合并将项目分配给属性,然后移动到网格中的下一列,以此类推...
我认为最终需要自己编写算法。
ConvertBack
方法,因为在该方法中你无法获取集合? - Eduardo Molteni