Свойство привязки строки к объекту - PullRequest
1 голос
/ 28 декабря 2011

Скажем, у меня есть такой класс:

public class MyClass
{
    public string Name;
    public int Id;

    public override string ToString()
    {
        return this.Id.ToString() + " - " + this.Name;
    }
}

Если я связываю текстовый столбец сетки данных с экземпляром объекта этого класса (без использования конвертера), вызывается переопределенная ToString, и отображается Id- Назовите успешно.Однако, когда я связываю один и тот же объект со свойством TextBlock, свойство ToString никогда не вызывается, а Text становится пустым.Я знаю, что могу использовать конвертер, но я пытаюсь понять, почему привязка не вызывает ToString, как это происходит при привязке к столбцу таблицы данных.

Привязка столбца Datagrid (источником элемента datagrid является коллекция объектов MyClass):

<DataGridTextColumn Binding="{Binding .}" Header="Id - Name"/>

Привязка TextBlock:

<TextBlock><Run Text="{Binding myClass, ElementName=UserControl}"/></TextBlock>

Примечание..Name, тогда он успешно отображает свойство Name.

1 Ответ

2 голосов
/ 20 января 2012

Существуют определенные преобразования, для которых WPF будет применять неявный преобразователь к привязке, если связанные типы не совпадают.Преобразование в строку можно выполнить, вызвав ToString () так же, как он неявно вызывается в других областях .Net.

Текстовая привязка TextBox является двусторонней по умолчанию и, следовательно, не может использовать неявный преобразователь, поскольку строка не может быть преобразована обратно в ваш тип MyClass.Привязка для шаблона отображения в столбце сетки является односторонней и поэтому может использовать неявный преобразователь.Я полагаю, что вы получите ошибку связывания, если переведите столбец сетки в режим редактирования, щелкнув по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...