Странная привязка wpf - PullRequest
       3

Странная привязка wpf

3 голосов
/ 29 сентября 2010

У меня проблема с привязками в wpf. Я обнаружил странную проблему. У меня есть класс ConfiugrationStringBuilder, который наследует от DbConnectionStringBuilder. Когда я делаю что-то подобное

public class ConfiugrationStringBuilder : DbConnectionStringBuilder
{
  public string Directory { get;set; }
}

ConfiugrationStringBuilder builder = new ConfiugrationStringBuilder(connStr);

builder.Directory = "d:\dir"; //my property

txtBox.DataContext = builder;

затем добавьте привязку к xaml для txtBox

<TextBox Name="txtBox" Text="{Binding Path=Directory}"></TextBox>

Проблема в том, что приведенный выше код не работает. Я не могу привязать к свойству класса, но я могу привязать к публичным свойствам базы DbConnectionStringBuilder.

И самое забавное, что когда я удаляю наследование из DbConnectionStringBuilder

так мой код выглядит так

public class ConfiugrationStringBuilder
{
  public string Directory { get;set; }
}

В этом случае вышеуказанная привязка работает хорошо. Я не могу найти информацию о таких случаях, и почему в этом случае привязка не работает? кто-нибудь может объяснить такое поведение?

Пока я писал вопрос, я пытался выяснить, в чем проблема. И обнаружил, что DbConnectionStringBuilder имеет индексатор, поэтому при попытке привязки к Path=Directory на кулисах он делает builder["Directory"], а не builder.Directory. В любом случае, кто-нибудь может сказать мне, почему это происходит?

1 Ответ

3 голосов
/ 29 сентября 2010

Это часть Binding-'Magic 'для поддержки сценариев Master-Detail (полное описание см. В здесь ).По сути, поскольку ваш объект реализует IEnumerable, TextBox будет пытаться связать его, как коллекцию, то есть будет искать элемент Current.

Чтобы обойти эту проблему, я, вероятно, посмотрюDBConnectionStringBuilder вместо того, чтобы наследовать от него (также вам лучше придерживаться композиции, а не наследования).

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