c# - Silverlight - ItemControl,条件项模板
本文关键字:条件 Silverlight ItemControl | 更新日期: 2023-09-27 18:08:36
我有一个绑定到ObservableCollection<User>
的项目控制器。我遇到了一个问题,当只有一个用户时,我想显示一个不同的ItemTemplate
(例如,只是评级-并使用默认值为其他一切),如果有更多,我想让人们编辑更多关于他们的信息-组合框等。
我认为可能有一种使用转换器的方法,但我不确定如何使用转换器来选择一个或另一个。到目前为止,我已经设法编写了一个转换器来隐藏/显示两个独立的ItemControl
s依赖于ObservableCollection<User> property
的Count
。然而,我不认为这是解决这个问题的最好方法。
有更好的方法来解决这个问题吗?
你只需要一个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}}/>