如何将TextBox.Lines绑定到BindingList<;字符串>;在C#中的WinForms中
本文关键字:gt 字符串 中的 WinForms lt Lines TextBox 绑定 BindingList | 更新日期: 2023-09-27 18:00:18
我有
private BindingList<string> log;
我的表单上有多行的logTextBox。如何将"日志"列表绑定到该文本框?
我不需要双向绑定。从日志到texbox的单向绑定就足够了。
您不能直接从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");
}