如何将TextBox.Lines绑定到C#中的WinForms中的BindingList <string>?</string>

时间:2014-04-27 09:20:18

标签: c# .net winforms data-binding binding

我有

private BindingList<string> log;

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

我不需要2路绑定。从日志绑定到texbox的一种方式就足够了。

1 个答案:

答案 0 :(得分:1)

您无法直接从BindingList<string>绑定到TextBox,因为Lines中的TextBox属性属于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");
}