我尝试实现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);
}
}
感谢您的帮助!
答案 0 :(得分:1)
如果问题代码中的注释行是您之前的代码,那么它表示您提供的项目类型为String
。对字符串的双向绑定毫无意义,绑定不知道在哪里分配新值。
显示的项目类型需要是某个具有String
类型属性的对象,它将是您传递给Binding
构造函数的此属性的名称。
那说不清楚为什么你甚至需要以这种方式子类ItemsControl。为什么不: -
<ItemsControl ItemSource="{Binding SomeEnumberableOfObjectsThatHaveASomeStringProperty}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Test="{Binding SomeString, Mode=TwoWay}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>