我有以下ContentControl
双向绑定,其Current
属性显示我ListView
的当前选择。
<ContentControl Content="{Binding Current}" ContentTemplateSelector="{StaticResource myTemplateSelector}">
它使用DataTemplateSelector
返回2 DataTemplates
中的一个,Content
为null
时为1,而Current
为null
时为
当我启动应用时,DataTemplate
属性为ListViewItem
,并且应用了正确的Current
。
当我选择一个null
时,ContentControl DataTemplate
属性不是ListViewItem
而Current
会更改。
当我取消选择null
,ContentControl
属性再次为DataTemplates
时,Current
消失,且{{1}}均未应用。
我创建了断点并将一些数据输出到控制台,我发现当{{1}}更改为null时, DataTemplateSelector不会运行。但是它第一次运行时它也是空的。所以我不明白为什么会发生这种情况。有人遇到过这个问题还是类似问题?
答案 0 :(得分:2)
取消选择项目时,列表框中的选定项目将变为空,因此绑定到Current
无法找到该属性。
在这种情况下,尝试访问Current
不会返回null
,它会返回由绑定吞噬的空引用异常。
我假设您以某种方式绑定到所选项目(无论是直接在列表框之外还是通过视图模型进行路由)。类似的东西:
<Grid DataContext="{Binding SelectedItem}">
<ContentControl ..../>
</Grid>
如果是这样,您需要更改绑定和模板选择器的逻辑:
在ContentControl:
Content="{Binding }"
在相关数据模板中,您需要在所有绑定的所有路径的开头添加Current.
。
在数据模板选择器中,而不是检查值,检查Current
属性(如果值的转换失败,则将其视为null)。