C# - Silverlight - ItemsControl,条件项模板

时间:2011-09-14 05:05:31

标签: c# silverlight data-binding

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

虽然我可能有一种方法可以使用转换器,但是我不知道如何使用转换器来选择其中一种。到目前为止,我已设法编写一个转换器来隐藏/显示两个单独的ItemControl可靠Count ObservableCollection<User> property。但是,我不认为这是解决这个问题的最佳方法。

有更好的解决方法吗?

2 个答案:

答案 0 :(得分:3)

您只需要一个带模板选择的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();
        }
    }

答案 1 :(得分:0)

我认为你只需要一个ItemsControl。

您可以通过同一转换器将Count绑定到ComboBox等的可见性。

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

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