【发布时间】:2013-03-21 13:15:00
【问题描述】:
我正在尝试将按钮的 IsEnabled 属性绑定到窗口的 CollectionViewSource 的属性。我这样做是为了实现 First/Previous/Next/Last 按钮,并希望在视图位于第一项等时禁用 First 和 Previous。
我设置了集合视图源,UI 控件正确绑定到它,可以在代码中访问它的视图,因此点击事件处理程序在浏览视图时可以正常工作。
<CollectionViewSource x:Key="cvMain" />
DockPanel 是窗口的根元素
<DockPanel DataContext="{StaticResource cvMain}">
FoJobs 是一个可观察的集合,cvJobs 是一个 CollectionView,我在按钮的点击处理程序中使用它
private void Window_Loaded(object sender, RoutedEventArgs e) {
((CollectionViewSource)Resources["cvMain"]).Source = FoJobs;
cvJobs = (CollectionView)((CollectionViewSource)Resources["cvMain"]).View;
}
我已经尝试过了,但遇到绑定错误“BindingExpression path error: '' property not found on 'object' ''ListCollectionView'”
<Button Name="cbFirst" Click="cbMove_Click" IsEnabled="{Binding Source={StaticResource cvMain}, Converter={StaticResource CurrPos2BoolConverter}}" />
我首先尝试使用转换器,但认为带有触发器的样式会更有效,但无法访问集合视图。即使底层数据上下文设置为集合视图源,绑定也会作为视图源传递给转换器(如果我没有明确设置绑定的源,如上所述),它没有货币属性(CurrentPosition、Count 等)。
任何帮助将不胜感激。
【问题讨论】:
-
尝试将 Source 属性更改为 ElementName。可能是它的帮助。
-
您在哪里显示数据?
DataGrid或 ... -
我不明白如何使用 ElementName,因为集合视图是在窗口资源中声明的,而不是作为可视树的元素。
-
我在数据网格中显示列表数据,附加文本框显示当前项目的属性,所有这些都与视图中的导航同步。
标签: wpf binding collectionviewsource