ContentControl与DataTemplateSelector和绑定内容

时间:2013-05-03 17:58:36

标签: c# xaml data-binding windows-runtime contentcontrol

我有以下ContentControl双向绑定,其Current属性显示我ListView的当前选择。

<ContentControl Content="{Binding Current}" ContentTemplateSelector="{StaticResource myTemplateSelector}">

它使用DataTemplateSelector返回2 DataTemplates中的一个,Contentnull时为1,而Currentnull时为

当我启动应用时,DataTemplate属性为ListViewItem,并且应用了正确的Current

当我选择一个null时,ContentControl DataTemplate属性不是ListViewItemCurrent会更改。

当我取消选择nullContentControl属性再次为DataTemplates时,Current消失,且{{1}}均未应用。

我创建了断点并将一些数据输出到控制台,我发现当{{1}}更改为null时, DataTemplateSelector不会运行。但是它第一次运行时它也是空的。所以我不明白为什么会发生这种情况。有人遇到过这个问题还是类似问题?

1 个答案:

答案 0 :(得分:2)

取消选择项目时,列表框中的选定项目将变为空,因此绑定到Current无法找到该属性。

在这种情况下,尝试访问Current不会返回null,它会返回由绑定吞噬的空引用异常。

我假设您以某种方式绑定到所选项目(无论是直接在列表框之外还是通过视图模型进行路由)。类似的东西:

<Grid DataContext="{Binding SelectedItem}">
    <ContentControl ..../>
</Grid>

如果是这样,您需要更改绑定和模板选择器的逻辑:

在ContentControl:

Content="{Binding }"

在相关数据模板中,您需要在所有绑定的所有路径的开头添加Current.

在数据模板选择器中,而不是检查值,检查Current属性(如果值的转换失败,则将其视为null)。