How to bind a list count to a label in WinForms?

前端 未结 3 850
既然无缘
既然无缘 2020-12-17 02:27

How can I bind the count of a list to a label. The following code does\'t get updated with the list is changed:

private IList list = new List&l         


        
3条回答
  •  囚心锁ツ
    2020-12-17 03:19

    According to Marc Gravell for this problem, he has suggested to create a facade that wraps the collection you want to bind to label1.Text

    I have tried to implement one (for fun) and was able to get binding to Count working.
    CountList is a facade that wraps a collection to bind to.

    Here is the full of the demo.

    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"));
            }
        }
    }
    

提交回复
热议问题