#c# #list #listbox #datasource #bindinglist
#c# #Список #listbox #источник данных #список привязок
Вопрос:
У меня есть список привязок, подобный следующему:
private BindingList<int[]> sortedNumbers = new BindingList<int[]>();
Каждая запись является int[6], теперь я хотел привязать ее к listbox, чтобы она обновляла его каждый раз, когда к нему добавляется набор чисел.
listBox1.DataSource = sortedNumbers;
Результатом является приведенный ниже текст для каждой записи:
Matriz Int32[].
Как мне отформатировать выходные данные или изменить их, чтобы они печатали номера каждого набора записей по мере их создания?
Ответ №1:
Вам нужно обработать Format
событие:
listBox1.Format = (o,e) =>
{
var array = ((int[])e.ListItem).Select(i=>i.ToString()).ToArray();
e.Value = string.Join(",", array);
};
Комментарии:
1. 1 интересно, не знал, что у меня там есть формат, но приведение, похоже, не работает при объединении.
2. Используете ли вы .NET 4.0 или используете более раннюю версию, чем эта?
3. Прошу прощения… Я привязан к 3.5
Ответ №2:
Как насчет использования IValueConverter в ItemTemplate?
<ListBox x:Name="List1" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource NumberConverter}}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
public class NumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is int[])
{
int[] intValues = (int[])value;
return String.Join(",", intValues);
}
else return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Convert(value, targetType, parameter, culture);
}
}
Комментарии:
1. Я не заметил, что вы используете winform. Но, по крайней мере, я нахожу другую наблюдаемую коллекцию в вашем коде: «BindingList<T>»