【问题标题】:Is a variable binding to a collection item possible是否可以将变量绑定到集合项
【发布时间】:2009-11-30 14:42:16
【问题描述】:

我正在尝试绑定到集合中的一个项目,但该项目的索引需要是“可变的”。 以下面的伪语法为例:

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

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

这样的事情可行吗?如何做?

【问题讨论】:

    标签: c# wpf binding variables collections


    【解决方案1】:

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

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

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

    希望对你有帮助。

    【讨论】:

    • 很高兴听到这个消息! =) 如果这对您有用,请不要忘记接受答案。 =)
    • 对不起。上次我不得不解决它,所以我无法真正测试它。现在我有一个类似的问题,测试它。没有工作,因为 ConverterParameter 不是 DependencyProperty。
    • 如何实现ConvertBack 方法,因为您没有在该方法中获取集合?
    • 您能描述一下您需要从价值转回收藏的情况吗?
    【解决方案2】:

    尝试在 ICollectionView 上阅读...它可以帮助您,因为它可以自动为您提供项目的索引来绑定您的文本。

    【讨论】:

      【解决方案3】:

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

      如:

      class myCollection
      {
      
          private string _current;
      
          public string CurrrentField
          {
               get { return _current; }
          }
      
          // TODO: Set current item to whatever the current item is...
      }
      

      编辑:

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

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

      我认为归根结底是自己为它编写一个算法。

      【讨论】:

      • 因为我正在使用集合中的所有元素,但在不同的绑定中。就像我说的,这只是问题本身的简化。我在数据网格的列中使用它,我希望数据网格的所有列都使用相同的模板(但第一列将绑定到字段 [0],第二列绑定到字段 [1] 等,我不'不知道 ui 将来会有多少列。这是从数据库生成的)。基本上它归结为解决上述问题。但感谢您提出这种可能性。
      猜你喜欢
      • 2021-10-06
      • 2011-10-24
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多