Получатель свойства класса, используемого в качестве DisplayMember
элемента управления ListBox, пытается отфильтровать элементы, которые не удовлетворяют условию.
Условие проверено в получателе свойства, заставляя возвращать null
или string.Empty
, когда текущий элемент не удовлетворяет условию.
Это поведение создает пустые элементы в ListBox.
Предложенное решение, конечно, состоит в предварительной фильтрации элементов, которые определяют источник данных ListBox, перед тем как свойство, используемое как DisplayMember
, может отформатировать отображаемые элементы:
[ListBox].DataSource = st.Where(cls => [Condition]).ToList();
Вероятно, лучшим решением является создание класса, который может выполнять фильтрацию самостоятельно.
Пример:
int Sender = 1;
TestClass test = new TestClass();
test.AddRange(new []
{
new TestClass() { Status = 0, QueueName = "Queue1", SSDocumentID = 1 },
new TestClass() { Status = 1, QueueName = "Queue1", SSDocumentID = 1 },
new TestClass() { Status = 1, QueueName = "Queue2", SSDocumentID = 2 },
new TestClass() { Status = 0, QueueName = "Queue3", SSDocumentID = 3 },
new TestClass() { Status = 1, QueueName = "Queue4", SSDocumentID = 4 },
});
listBox1.DisplayMember = "DisplayMember";
listBox1.DataSource = test.Filter(Sender).ToList();
public class TestClass
{
public TestClass() => this.Members = new List<TestClass>();
public int Status { get; set; }
public int SSDocumentID { get; set; }
public string QueueName { get; set; }
public string DisplayMember =>
$"{this.SSDocumentID} | {this.QueueName}";
public List<TestClass> Members { get; }
public void Add(TestClass element) => this.Members.Add(element);
public void AddRange(IEnumerable<TestClass> elements) => this.Members.AddRange(elements.ToArray());
public IEnumerable<TestClass> Filter(int status)
{
if (this.Members.Count == 0) return null;
return this.Members.Where(st => st.Status == status);
}
}