如何将TextBox.Lines绑定到BindingList<;字符串>;在C#中的WinForms中

本文关键字:gt 字符串 中的 WinForms lt Lines TextBox 绑定 BindingList | 更新日期: 2023-09-27 18:00:18

我有

private BindingList<string> log;

我的表单上有多行的logTextBox。如何将"日志"列表绑定到该文本框?

我不需要双向绑定。从日志到texbox的单向绑定就足够了。

如何将TextBox.Lines绑定到BindingList<;字符串>;在C#中的WinForms中

您不能直接从BindingList<string>绑定到TextBox,因为TextBox中的Lines属性的类型是string[]而不是BindingList<string>

您需要一个string[]属性和一个属性更改通知。

下面是你如何做到这一点的一个例子。

public class LinesDataSource : INotifyPropertyChanged
{
    private BindingList<string> lines = new BindingList<string>();
    public LinesDataSource()
    {
        lines.ListChanged += (sender, e) => OnPropertyChanged("LinesArray");
    }
    public BindingList<string> Lines
    {
        get { return lines; }
    }
    public string[] LinesArray
    {
        get
        {
            return lines.ToArray();
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后在您的表单/用户控制

private LinesDataSource dataSource = new LinesDataSource();
private void Setup()
{
    textBox.DataBindings.Add("Lines", dataSource, "LinesArray");
    Populate();
}
private void Populate()
{
    dataSource.Lines.Add("whatever");
}