2010-10-02 2 views
2

Я пытаюсь реализовать метод PrepareContainerForItemOverride элемента ItemsControl. Он поместит элементы в TextBox. Он работает хорошо, но как я могу привязать элемент к тексту текстового свойства? Односторонний режим работает хорошо, но когда мне нужен двухсторонний режим, я должен знать путь.Переплет в методе PrepareContainerForItemOverride

Вот мой код:

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

Если строка с комментариями в коде в вашем вопросе - это то, что у вас есть до этого, это означает, что тип элемента, который вы предоставляете, - String. Двусторонняя привязка к строке не имеет смысла, поскольку привязка не будет знать, где назначить новое значение.

Тип отображаемых элементов должен быть каким-то объектом, который имеет свойство типа String, это имя было бы именем этого proprerty, которое вы передадите конструктору Binding.

Это говорит о том, что непонятно, почему вам даже понадобится подкласс класса ItemsControl таким образом. Почему нет: -

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