Csharp/C#教程:如何将列表计数绑定到WinForms中的标签?分享


如何将列表计数绑定到WinForms中的标签?

如何将列表的计数绑定到标签。 更改列表后,以下代码无法更新:

private IList list = new List(); //... label1.DataBindings.Add("Text", list.Count, ""); 

根据Marc Gravell的问题,他建议创建一个外观 ,用于包装要绑定到label1.Text的集合。

我试图实现一个(为了好玩)并且能够绑定到Count工作。
CountList是一个包装要绑定到的集合的外观。

这是完整的演示。

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; namespace TextBindingTest { public partial class Form1 : Form { private readonly CountList _List = new CountList(new List { "a", "b", "c" }); public Form1() { InitializeComponent(); BindAll(); } private void BindAll() { var binding = new Binding("Text", _List, "Count", true); binding.Format += (sender, e) => e.Value = string.Format("{0} items", e.Value); label1.DataBindings.Add(binding); } private void addToList_Click(object sender, EventArgs e) { _List.Add("a"); } private void closeButton_Click(object sender, EventArgs e) { Close(); } } public class CountList : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged = delegate { }; private void OnPropertyChanged(PropertyChangedEventArgs e) { var handler = PropertyChanged; handler(this, e); } private ICollection List { get; set; } public int Count { get { return List.Count; } } public CountList(ICollection list) { List = list; } public void Add(T item) { List.Add(item); OnPropertyChanged(new PropertyChangedEventArgs("Count")); } } } 

绑定侦听IPropertyChanged接口的PropertyChanged事件。 我认为List.Count在更改时不会被报告为PropertyChanged事件。

您可以做的是实现自定义列表或查找通知何时更改计数的集合。

如果您有列表框的数据源,则可以使用DataSourceChanged。 只需记住更新并重新绑定数据源。

这可能有点贫民窟,但这是我合作的例子:

上述就是C#学习教程:如何将列表计数绑定到WinForms中的标签?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 List collection = new List(); public Form1() { InitializeComponent(); listBox1.DataSourceChanged += listbox1_Changed; } private void button1_Click(object sender, EventArgs e) { collection.Add(new Random().Next(100)); listBox1.BeginUpdate(); listBox1.DataSource = null; listBox1.DataSource = collection; listBox1.EndUpdate(); } private void listbox1_Changed(object sender, EventArgs e) { textBox1.Text = collection.Count.ToString(); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1016603.html

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐