我有一个项目控制器,我绑定到ObservableCollection<User>
。
我遇到了一个问题,当只有一个用户时,我想展示一个不同的ItemTemplate
(只是评级为例子 - 并使用默认的其他所有内容)如果还有更多,我想让人们编辑更多关于他们 - 组合框等。
虽然我可能有一种方法可以使用转换器,但是我不知道如何使用转换器来选择其中一种。到目前为止,我已设法编写一个转换器来隐藏/显示两个单独的ItemControl
可靠Count
ObservableCollection<User> property
。但是,我不认为这是解决这个问题的最佳方法。
有更好的解决方法吗?
答案 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}}/>