Различные представления элементов в списке в зависимости от содержимого - PullRequest
0 голосов
/ 19 сентября 2010

У меня есть список элементов с таким интерфейсом, как этот

public interface INamedItem
{
    string DisplayName
    {
        get;
    }
}

В Silverlight я могу привязать к списку и показать отображаемое имя, и это работает.

Однако, в зависимости от значения DisplayName, я хочу показать его по-разному (использовать другой шаблон данных?).

Если в DisplayName есть два '\ t, то я хочу, чтобы текст перед первой вкладкой был выровнен по левому краю, текст между вкладками был центрирован, а остальная часть текста выровнена по правому краю.

Есть ли простой способ сделать это? Я добавил "ответ" ниже, который нашел в Google после добавления этого сообщения, но я чувствую, что это должен быть лучший способ.

1 Ответ

0 голосов
/ 19 сентября 2010

Так что это похоже на работу (http://weblogs.asp.net/joewrobel/archive/2009/01/25/conditional-formatting-in-the-silverlight-datagrid.aspx) (игнорируйте исправленное с колонками).

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        INamedItem namedItem = value as INamedItem;
        if (namedItem == null)
        {
            TextBlock block = new TextBlock();
            block.Text = "";
            return block;
        }

        string[] tabSeperatedParts = namedItem.DisplayName.Split('\t');

        if (tabSeperatedParts.Count() != 3)
        {
            TextBlock block = new TextBlock();
            block.Text = namedItem.DisplayName;
            return block;
        }
        else
        {
            Grid grid = new Grid();
            grid.RowDefinitions.Add(new RowDefinition());
            for (int i = 0; i < 3; ++i)
            {
                ColumnDefinition col = new ColumnDefinition();
                col.MinWidth = 220;
                grid.ColumnDefinitions.Add(col);
                TextBlock text = new TextBlock();
                text.Text = tabSeperatedParts[i];
                grid.Children.Add(text);
                Grid.SetColumn(text, i);
            }
            ((TextBlock)grid.Children[0]).TextAlignment = TextAlignment.Left;
            ((TextBlock)grid.Children[1]).TextAlignment = TextAlignment.Center;
            ((TextBlock)grid.Children[2]).TextAlignment = TextAlignment.Right;
            return grid;
        }
    }

    <ScrollViewer.Resources>
        <magecrawlList:ListItemValueConverter x:Key="ItemConverter"/>
    </ScrollViewer.Resources>
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <ContentControl Content="{Binding Converter={StaticResource ItemConverter}}" HorizontalContentAlignment="Stretch" 
                                VerticalContentAlignment="Stretch" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...