Как установить свойство multiline для текстового поля, используемого в привязке данных WPF - PullRequest
1 голос
/ 27 мая 2011

Я новичок в привязке данных, но у меня запущена простая программа, в которой я связываю строку данных с текстовым полем.Это работает хорошо, каждый раз, когда строка обновляется, она показывает ее в текстовом поле.

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

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

Надеюсь, что вы можете помочь, или дать некоторые предложения.

1 Ответ

1 голос
/ 27 мая 2011

Нет способа, которым вы можете использовать привязку данных WPF для добавления некоторых данных, и вы правы в том, что при каждом обновлении строки журнала привязка будет переоцениваться.Это может повредить производительности, если строка становится очень длинной.Могу ли я предложить другой дизайн?Вместо того, чтобы хранить журнал в виде одной строки, почему бы не сохранить его в виде списка отдельных сообщений журнала?Затем вы можете связать это со списком в вашем пользовательском интерфейсе.Когда добавляются новые элементы журнала, он просто добавляет новый элемент в список.Этот дизайн также может использовать преимущества виртуализации пользовательского интерфейса.

Пример быстрого кода:

ObservableCollection<string> logItems = new ObservableCollection<string>();

public ObservableCollection<string> LogItems
{
  get { return _logItems; }
}

// add items as they are logged
public AddToLog(string message)
{
  logItems.Add(message);
}

Затем вы можете привязать эту коллекцию сообщений журнала к своему пользовательскому интерфейсу:

<ListBox x:Name="list" ItemsSource="{Binding LogItems}"/>

Или, если вы хотите связать в коде позади ...

list.SetBinding(ListBox.ItemsSource, new Binding("LogItems")
{
  Source = this;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...