Привязка в методе PrepareContainerForItemOverride

Я пытаюсь реализовать метод PrepareContainerForItemOverride для ItemsControl. Это поместит элементы в TextBox. Это хорошо работает, но как я могу привязать элемент к текстовому свойству 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 ответ

Решение

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

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

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

<ItemsControl ItemSource="{Binding SomeEnumberableOfObjectsThatHaveASomeStringProperty}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
       <TextBox Test="{Binding SomeString, Mode=TwoWay}" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
Другие вопросы по тегам