Я хочу реализовать конвертер так, чтобы определенные элементы XAML отображались/исчезали только в том случае, если есть элементы в ObservableCollection
.Как реализовать конвертер CollectionLengthToVisibility?
Я ссылался на How to access generic property without knowing the closed generic type, но не могу заставить его работать с моей реализацией. Он создает и развертывает ОК (для эмулятора и устройства Windows Phone 7), но не работает. Кроме того смесь выбрасывает исключение и больше не будет отображения страницы,
NullReferenceException: ссылка на объект не указывает на экземпляр объекта .
Вот то, что я до сих пор,
// Sets the vsibility depending on whether the collection is empty or not depending if parameter is "VisibleOnEmpty" or "CollapsedOnEmpty"
public class CollectionLengthToVisibility : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
// From https://stackoverflow.com/questions/4592644/how-to-access-generic-property-without-knowing-the-closed-generic-type
var p = value.GetType().GetProperty("Length");
int? length = p.GetValue(value, new object[] { }) as int?;
string s = (string)parameter;
if (((length == 0) && (s == "VisibleOnEmpty"))
|| ((length != 0) && (s == "CollapsedOnEmpty")))
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
return null;
}
}
Вот как я сослалась на преобразователь на Blend,/XAML
<TextBlock Visibility="{Binding QuickProfiles, ConverterParameter=CollapsedOnEmpty, Converter={StaticResource CollectionLengthToVisibility}}">Some Text</TextBlock>