我有他们的视图模型的页面。 Page
使用Frame
替换Frame.NavigationManager.Navigate()
。
在一个Page
中,我有GroupBox
个孩子DataGrid
。我希望GroupBox
根据Visibility
中的项目计数更改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错误:4:无法找到与引用绑定的源
&#39;的ElementName = SomeDataGrid&#39 ;. BindingExpression:路径= HasItems;
我尝试使用x:Reference
,但遇到了同样的问题。
有人可以解释我做错了吗?
答案 0 :(得分:2)
可能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");
}
}