Привязка в методе PrepareContainerForItemOverride - PullRequest
2 голосов
/ 02 октября 2010

Я пытаюсь реализовать метод 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 Ответ

1 голос
/ 02 октября 2010

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

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

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

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