wpf привязка к строке - PullRequest
       14

wpf привязка к строке

2 голосов
/ 04 августа 2011

У меня есть Movie класс с Dim _characters = New ObservableCollection(of String)
Characters, это связанное свойство для получения и установки

Как я могу получить символы, которые будут отображаться в списке с помощью Binding?
Пока у меня есть следующее, это не работает, так как я не знаю, что поставить вместо ToString.

<ListBox Name="cList" ItemsSource="{Binding Characters}">

 <ItemsControl >
   <ItemsControl.ItemTemplate >
    <DataTemplate >
     <TextBox Text="{Binding ToString}"/>  
    </DataTemplate> 
   </ItemsControl.ItemTemplate> 
 </ItemsControl>

 </ListBox> 

Я хочу, чтобы они были редактируемыми, поэтому текстовое поле.

Я пытался привязать Characters к TextBox напрямую, даже это не сработало.

Редактировать: в коде у меня есть parentGrid1.DataContext = me.movies, где
родительская сетка содержит фильмы.

Ответы [ 5 ]

9 голосов
/ 09 апреля 2013

Для тех, кто испытывает исключение

... для привязки требуется путь или xpath ...

Объект можно связать напрямую следующим образом:

<Label Content="{Binding .}" />
5 голосов
/ 04 августа 2011

Измените привязку TextBox к следующему. Я думаю, что это должно работать:

<TextBox Text="{Binding}"/>

Это загружает сам элемент вместо вывода свойства или метода. Поскольку элемент является строкой, он должен связываться со значением строки.

3 голосов
/ 04 августа 2011

Невозможно выполнить двустороннюю привязку к ObservableCollection<string>. Чтобы сделать строки редактируемыми, вы должны создать класс со свойством get / set строки как следующий класс Foo:

public class Foo
{
    string _text;

    public Foo(string text)
    {
        _text = text;
    }
    public string Text 
    {
        get { return _text; }
        set { _text = value; }
    }
}

Ваш Characters должен иметь тип ObservableCollection<Foo>, и ваш XAML должен быть изменен так, чтобы текстовые поля были привязаны к Foo.Text:

<ListBox ItemsSource="{Binding Characters}" >
    <ListBox.ItemTemplate >
        <DataTemplate >
            <TextBox Text="{Binding Text}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
3 голосов
/ 04 августа 2011

Просто удалите часть кода ToString.

В настоящее время вы говорите программе, которую хотите привязать к объекту с именем ToString

2 голосов
/ 04 августа 2011

Я так понимаю, что Персонажи являются публичной собственностью. Отладьте и убедитесь, что get вызывается для символов. Если у вас есть дата-текст страницы / окна для Movies, то вам нужно, чтобы ItemsSource в ListBox был {Binding Path = Characters}

...