显示ItemsControl.ItemsSource是否为null

问候,

我有一个ItemsControl,我更改了模板,为绑定的ItemsSource中的每个对象显示一个RadioButton。

但是ItemsSource可以为空,当它为空时我想显示默认值。 像“绑定列表中没有可供您选择的项目”……

我想到的一种方法是将ItemsControl.Visibility设置为Collapsed,并将TextBlock.Vsibility设置为Visible,显示文本..但这将包含更多数据。

如果ItemsControl.ItemsSource为null,是否可以显示默认值?

如果我理解正确,我认为您可以通过创建IValueConverter来解决您的问题。

创建这个简单的转换器后:

 public class AnyItemsToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var collection = value as IEnumerable; if (collection == null) return Visibility.Collapsed; return collection.OfType().Any() ? Visibility.Collapsed : Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

您可以使用RelativeSource Binding覆盖ItemsControl模板以支持它。

                  

您不应该创建一个转换器,它显示您的列表是否为空。 当您的XAML,转换器和数据源是完全独立的项目时,它会更好。 关于松耦合的MVVM不是吗?

好吧,背后的代码是邪恶的。 感谢您指出了这一点。 我更正了源代码,它现在完全是声明式的:

          

您可以做的一件事是,在检查ItemsControl.ItemsSource为空之后,您可以添加单个项目"The binded list contains no items for you to select" 。 我希望这能满足你的目的。