WPF Эквивалент Winforms Событие ListControl.Format?(Форматирование элементов списка с делегатом) - PullRequest
1 голос
/ 18 февраля 2011

Я наконец переключаюсь с Winforms на WPF (3.5), и я пытаюсь переместить эту функциональность через:

Распространенной практикой является управление форматированием отображения списка / поля со списком в событии Format путем передачи делегата в контейнер элемента управления. В событии «Формат» делегат форматирует отображаемый текст элемента списка так, как я хочу, чтобы он отображался (например, путем объединения свойств отображаемого элемента). Есть ли какой-либо эквивалентный способ в поле со списком / списком WPF указать делегата для форматирования внешнего вида текста элемента списка во время выполнения? Спасибо, YS

К вашему сведению - вот что я пытался получить, как описано в моем ответе:

CodeBehind:

public partial class MainWindow : Window
{

    private List<Foo> l = new List<Foo>();
    //Formatting done by delegate, passed to converter.
    MyConverter<Foo>  cv = new MyConverter<Foo>(f=> "#" + f.ID + " = " + f.Name);
    public MainWindow()
    {
        Resources.Add("myConverter", cv);
        l.Add(new Foo(){ID=1, Name = "aaaa aaaa"});
        l.Add(new Foo(){ID=2, Name = "bbbb bbbb "});
        DataContext = l;
        InitializeComponent();
    }
}


public class Foo
{

    public int ID { get; set; }
    public string Name { get; set; }


}


public class MyConverter<T> : IValueConverter
{
    private Func< T, string> _formatter { get; set; }
    public MyConverter(Func<T, string> Formatter)
    {
        _formatter = Formatter;
    }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return _formatter((T)value);
    }

}

А потом в xaml:

<ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Converter={StaticResource ResourceKey=myConverter}}"> </TextBlock> </DataTemplate> </ComboBox.ItemTemplate>

Ответы [ 2 ]

0 голосов
/ 25 февраля 2011

Для всех, задыхающихся после этого вопроса ... Я разместил вопрос на форуме MS WPF, и из ответа я думаю, что лучший путь для меня - создать собственный IValueConverter, в котором я могу передать делегата для использования в методе Convert, и установить его в качестве конвертера в DataTemplate.

0 голосов
/ 18 февраля 2011

Если вы хотите отформатировать каждый элемент одинаково, загляните в ListBox.ItemContainerStyle. Это будет содержать шаблон для каждого элемента. Если вы хотите изменить стили для каждого элемента на основе некоторой логики, используйте приведенное выше вместе с ListBox.ItemContainerStyleSelector. См. MSDN DOC http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyle.aspx и http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyleselector.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...