c# - Silverlight - ItemControl,条件项模板

本文关键字:条件 Silverlight ItemControl | 更新日期: 2023-09-27 18:08:36

我有一个绑定到ObservableCollection<User>的项目控制器。我遇到了一个问题,当只有一个用户时,我想显示一个不同的ItemTemplate(例如,只是评级-并使用默认值为其他一切),如果有更多,我想让人们编辑更多关于他们的信息-组合框等。

我认为可能有一种使用转换器的方法,但我不确定如何使用转换器来选择一个或另一个。到目前为止,我已经设法编写了一个转换器来隐藏/显示两个独立的ItemControl s依赖于ObservableCollection<User> propertyCount。然而,我不认为这是解决这个问题的最好方法。

有更好的方法来解决这个问题吗?

c# - Silverlight - ItemControl,条件项模板

你只需要一个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();
        }
    }

我认为你只需要一个ItemsControl。

您可以通过相同的转换器将计数绑定到组合框的可见性等。

你可能只需要这样的东西,

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