C # - Silverlight - ItemControl, шаблон условного элемента - PullRequest
3 голосов
/ 14 сентября 2011

У меня есть контроллер предметов, который я связываю с ObservableCollection<User>. Я столкнулся с проблемой, когда, когда есть только один пользователь, я хотел бы показать другой ItemTemplate (например, только Рейтинг - и использовать по умолчанию для всего остального), и если есть еще, я бы хотел, чтобы люди немного редактировали подробнее о них - поле со списком и т. д.

Я думаю, что, вероятно, есть способ использовать конвертер для этого, однако я не уверен, как я могу использовать конвертер для выбора того или другого. До сих пор мне удалось написать конвертер для скрытия / отображения двух отдельных ItemControl s, зависящих от Count из ObservableCollection<User> property. Однако я не думаю, что это лучший способ решения этой проблемы.

Есть ли лучшие способы решения этой проблемы?

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Вам нужен только один ItemsControl с выбором шаблона:

 <ItemsControl ItemsSource="{Binding Users}" ItemTemplate="{Binding Users.Count, Converter={StaticResource UserTemplateSelector}"/>

, где

    public class UserTemplateSelector : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int userCount = (int) value;
            if (userCount == 1)
            {
                return (DataTemplate) Application.Current.Resources["SingleUserTemplate"]; //SingleUserTemplate should be created e.g. in App.xaml
            }

            return (DataTemplate)Application.Current.Resources["MultipleUserTemplate"]; //MultipleUserTemplate should be created e.g. in App.xaml
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
0 голосов
/ 14 сентября 2011

Я думаю, вам нужен только один ItemsControl.

Вы можете связать счетчик с видимостью комбинированных списков и т. Д. С помощью того же конвертера.

Тебе, наверное, просто нужно что-то подобное,

<ComboBox Visibility={Binding DataContext.Count, ElementName=LayoutRoot, Converter={StaticResource YourConverter}}/>
...