【问题标题】:C# - Silverlight - ItemControl, conditional item templateC# - Silverlight - ItemControl,条件项模板
【发布时间】:2011-09-14 05:05:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# silverlight data-binding


    【解决方案1】:

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

    【讨论】:

    • 太棒了!到目前为止,它仍然有效,但是因为我有我的DataTemplates (UserControl.Resources)。所以我需要通过访问调用转换器的视图来找到模板。这可能吗?
    • 当我尝试使用 UserManagementView 类实例化一个变量并从那里访问资源时,调用转换器的第二次我得到“树中已经存在该名称:MultipleUserTemplate。是因为我不通过其已创建的对象访问视图?
    【解决方案2】:

    我认为你只需要一个 ItemsControl。

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

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

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

    【讨论】:

    • 这是我已经在做的事情,但是如果需求发生变化,这将变得太混乱而无法使用。
    • 您始终可以创建两个面板,例如 Grid,一个包含一些控件,另一个包含一些其他控件。并且只是绑定它们的可见性。您不需要模板选择器
    • 是的,这就是我目前得到的。根据不同的标准制定数据模板似乎是一种更好的方法。我也可以用它做其他事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2021-07-24
    相关资源
    最近更新 更多