在PrepareContainerForItemOverride方法中绑定

时间:2010-10-02 15:22:33

标签: silverlight binding silverlight-4.0 itemscontrol

我尝试实现ItemsControl的PrepareContainerForItemOverride方法。它会将项目放到TextBox中。它工作得很好,但是如何将项目绑定到文本框文本属性?单向模式效果很好,但是当我想要双向模式时,我必须知道路径。

这是我的代码:

protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
        {
            base.PrepareContainerForItemOverride(element, item);

            if (element is TextBox)
            {
                //((TextBox)element).Text = (string)item;
                Binding binding = new Binding("I don't know what should i write here.");
                binding.Mode = BindingMode.TwoWay;
                ((TextBox)element).SetBinding(TextBox.TextProperty, binding);
            }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果问题代码中的注释行是您之前的代码,那么它表示您提供的项目类型为String。对字符串的双向绑定毫无意义,绑定不知道在哪里分配新值。

显示的项目类型需要是某个具有String类型属性的对象,它将是您传递给Binding构造函数的此属性的名称。

那说不清楚为什么你甚至需要以这种方式子类ItemsControl。为什么不: -

<ItemsControl ItemSource="{Binding SomeEnumberableOfObjectsThatHaveASomeStringProperty}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
       <TextBox Test="{Binding SomeString, Mode=TwoWay}" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>