2009-11-30 79 views
5

我想绑定到一个集合内的项目,但该项目的索引需要“可变”。 采取以下伪语法例如:是一个变量绑定到一个集合项目可能

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

是这样的可能吗?如果我的属性Pos为1,它应该绑定到集合“Fields”中的第一个项目,并且如果我的Pos为3,它应该绑定到集合中的第三个项目。我简化了我的问题到这种情况...

是这样的可行和如何?

回答

0

为什么不使用返回集合中当前项目的属性并将其绑定到WPF控件?

如:

class myCollection 
{ 

    private string _current; 

    public string CurrrentField 
    { 
     get { return _current; } 
    } 

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

编辑:

在这种情况下,我认为你需要创建一个跟踪你的数据网格的列,并在项目,然后对准一个辅助类,你集合,以便绑定到您的UI的属性可以正确更新。

首先填满集合,然后你知道你有多少物品,然后通过辅助类循环通过集合并将物品分配给属性,然后移动到网格中的下一列等。

我认为这归结为你自己写一个算法。

+0

因为我使用集合中的所有元素,但使用不同的绑定。就像我说的,这只是问题本身的简化。 我在一个数据网格的列中使用它,我希望数据网格的所有列使用相同的模板(但第一列将有一个绑定到字段[0],第二个字段[1]等,我不知道将来会有多少列,这是从数据库中产生的)。基本上它归结为解决上述问题。但感谢您提出这种可能性。 – Jan 2009-11-30 16:32:34

5

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

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

如果您需要此转换器的代码或有关转换器的其他信息,请发表评论。

希望它有帮助。

+0

谢谢。这听起来对我很好。 – Jan 2009-12-02 14:12:36

+0

很高兴听到它! =) 不要忘了接受这个答案,如果这为你工作。 =) – levanovd 2009-12-02 15:05:08

+0

有一天,我会问IValueConverter嫁给我.. – cwap 2009-12-05 22:07:45

1

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

相关问题