【问题标题】:How to set the multiline property on a textbox used in WPF databinding如何在 WPF 数据绑定中使用的文本框上设置多行属性
【发布时间】:2011-09-03 04:42:30
【问题描述】:

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

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

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

希望你能帮忙,或者给点建议。

【问题讨论】:

    标签: c# wpf data-binding textbox multiline


    【解决方案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;
    });
    

    【讨论】:

    • 您好 Colin,感谢您的建议。我试过了,但它不起作用,希望您能快速浏览一下。之前没用过xaml的绑定方式,都是在代码中完成的,有点迷茫。以下是代码:
    • 好的,我无法添加代码。呵呵。我如何像你一样添加代码块?
    • 粘贴代码然后格式化。但我猜 cmets 部分不允许您添加长代码。您可以编辑原始问题并在此处添加代码。
    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多