一个变量能否绑定到一个集合项?

5

我试图绑定集合中的一个项目,但是该项目的索引需要是“变量”。 例如,采用以下伪代码语法:

<TextBlock Text="{Binding Fields[{Binding Pos}]}" />

类似这样的事情是否可能?如果我的属性Pos为1,则应该绑定到集合“Fields”中的第一项,如果我的Pos为3,则应该绑定到集合中的第三项。我将我的问题简化为这种情况...

这样的做法是否可行,如何实现?

3个回答

5

是的,这是可能的。您应该实现绑定转换器,将集合转换为集合项,并将索引作为转换器参数。然后您将像这样使用它:

<TextBlock Text="{Binding Fields, 
                  Converter={StaticResource CollectionToItemConverter,
                  ConverterParameter={Binding Pos}}}" />

如果您需要此转换器的代码或其他有关转换器的信息,请留言。
希望能对您有所帮助。

很高兴听到这个消息!=) 如果这对你有帮助,请不要忘记接受答案。=) - levanovd
2
抱歉,上次我不得不绕开它,所以我无法真正测试它。现在我遇到了类似的问题,进行了测试,但由于ConverterParameter不是DependencyProperty,所以没有起作用。 - Jan
你如何实现ConvertBack方法,因为在该方法中你无法获取集合? - Eduardo Molteni
你能描述一下在什么情况下需要将值转换回集合吗? - levanovd

1
尝试阅读关于ICollectionView的内容...它可以帮助你,因为它可以自动给出绑定文本的项目索引。

0
为什么不使用一个属性来返回集合中的当前项,并将其绑定到您的WPF控件上呢?
例如:
class myCollection
{

    private string _current;

    public string CurrrentField
    {
         get { return _current; }
    }

    // TODO: Set current item to whatever the current item is...
}

编辑:

在这种情况下,我认为您需要创建一个帮助类来跟踪数据网格中的列,并将其与集合中的项目对齐,以便绑定到 UI 的属性可以正确更新。

首先填充集合,然后您就知道其中有多少项,然后使用帮助类循环遍历集合并将项目分配给属性,然后移动到网格中的下一列,以此类推...

我认为最终需要自己编写算法。


因为我正在使用集合中的所有元素,但在不同的绑定中使用。就像我说的,这只是问题本身的简化。我正在将其用于数据网格的列,并且我希望数据网格的所有列都使用相同的模板(但第一列将绑定到Fields [0],第二列将绑定到Fields [1]等等,而我不知道未来UI将有多少列。那是从数据库生成的)。基本上归结为解决上述描述的问题。但感谢您提出这种可能性。 - Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接