如何在WPF数据绑定中使用的文本框上设置多行属性

时间:2011-05-27 07:24:37

标签: c# wpf data-binding textbox multiline

我是数据绑定的新手,但是运行了一个简单的程序,我将一串数据绑定到文本框。这很有效,每次更新字符串时都会在文本框中显示它。

但是我需要一个文本框来附加数据而不是用新数据字符串覆盖它。 1.我知道我可以将新数据字符串附加到现有数据字符串,但从长远来看这不会影响性能,因为这会导致每次更新时整个字符串都与文本框绑定在一起? 2.您是否有任何关于如何实现附加的建议,而不必担心每次更新时都将整个字符串复制到文本框中?

此字符串用于将一些日志记录信息输出到屏幕(通过文本框控件),它注定会变得非常大。

希望您能提供帮助或提供一些建议。

1 个答案:

答案 0 :(得分:1)

没有办法可以使用WPF数据绑定来附加一些数据,并且您的观察是正确的,每次更新日志字符串时,绑定将重新评估。如果字符串变得很长,这可能会损害性能。我可以推荐一个不同的设计吗?而不是将您的日志存储为单个字符串,为什么不将它存储为离散日志消息列表?然后,您可以将其绑定到UI中的列表。添加新日志项时,只需在列表中添加新项。此设计还可以利用UI虚拟化。

快速代码示例:

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);
}

然后,您可以将此日志消息集合绑定到UI:

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

或者如果你想在代码隐藏中绑定......

list.SetBinding(ListBox.ItemsSource, new Binding("LogItems")
{
  Source = this;
});