我有他们的视图模型的页面.使用Frame.NavigationManager.Navigate()在Frame中显示页面.
在一个页面中,我有一个带有子DataGrid的GroupBox.我希望GroupBox根据DataGrid中的项目数来更改它的可见性.
这是我有的:
<GroupBox ....
Visibility="{Binding ElementName=SomeDataGrid,
Path=HasItems,
Converter={StaticResource BooleanToVisibilityConverter}}">
<DataGrid x:Name="SomeDataGrid"
IsReadOnly="True"
ItemsSource="{Binding Items}"/>
</GroupBox>
问题
将Page更改为另一个并返回后,我有以下绑定异常
System.Windows.Data Error: 4 : Cannot find source for binding with reference
‘ElementName=SomeDataGrid’. BindingExpression:Path=HasItems;
我尝试过使用x:Reference但遇到了同样的问题.
有人可以解释我做错了吗?
最佳答案 可能,Items集合在某些时候是空的,这使得GroupBox变得崩溃.当GroupBox折叠时,它会从视图中删除其内容(DataGrid).
从视图中删除DataGrid后,Binding无法再找到它的引用,因此它会中断.
如果我是你,我会将GroupBox Visibility直接绑定到ViewModel属性,而不是将其绑定到DataGrid.
<GroupBox ....
Visibility="{Binding HasItems,
Converter={StaticResource BooleanToVisibilityConverter}}">
<DataGrid x:Name="SomeDataGrid"
IsReadOnly="True"
ItemsSource="{Binding Items}"/>
</GroupBox>
在ViewModel中:
public bool HasItems
{
get
{
return Items != null && Items.Count() > 0;
}
}
public IEnumerable Items
{
get
{
// ...
}
set
{
// ...
RaisePropertyChanged("HasItems");
}
}