我是WPF世界的新手,我经常问自己“我做得对吗?”我当前的场景涉及根据集合的状态绑定ListView的可见性。我的转换器工作正常,我的问题/问题是如何最好地声明XAML来设置绑定。
首先,我有一个CollectionViewSource
,它绑定到ObservableCollection
个视图模型:
<CollectionViewSource x:Key="MyViewSource" Source="{Binding Path=MyCollection}" />
接下来,我已将ListView
声明如下:
<ListView DataContext="{StaticResource MyViewSource}" ItemsSource="{Binding}" />
我的转换器的代码:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && (value is ICollection && (value as ICollection).Count > 0))
return Visibility.Visible;
return Visibility.Hidden;
}
我想出了两种设置绑定的方法,以便它实际起作用:
第一个:
Visibility="{Binding Path=SourceCollection,
Converter={StaticResource ListToVisibilityConverter}}"
第二个:
Visibility="{Binding RelativeSource={RelativeSource Self},
Path=DataContext.Source,
Converter={StaticResource ListToVisibilityConverter}}"
在第二种情况下,Convert方法被调用两次,我不知道为什么......这让我相信这不是'正确'的方式。
最后,我还尝试将路径设置为Path=Source
和Path=DataContext.Source
,但那些在运行时(分别)失败并出现这些错误:
BindingExpression路径错误:找不到'DataContext'属性 'object'''ListCollectionView'BindingExpression路径错误:'来源' 'object'''ListCollectionView'
上找不到属性
我的印象是,当我将ListView的DataContext设置为CollectionViewSource时,我应该能够访问其属性(例如Source
)。为什么我需要在此处添加RelativeSource
?
这里有一系列子问题,我完全明白。因此,非常感谢您回答一些问题或给出一些指示。
谢谢!