3

我将以下ContentControl双向绑定到一个Current属性,该属性显示我的当前选择ListView

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

它使用 aDataTemplateSelector返回 1 of 2 DataTemplates,一个Content是返回,另一个返回null不是。

当我启动我的应用程序时,Current属性是null并且应用了正确DataTemplate的。

当我选择一个ListViewItem时,Current属性不是null并且ContentControl DataTemplate应该进行更改。

当我取消选择ListViewItem,Current属性null再次ContentControl消失并且没有DataTemplates应用。

我做了断点并将一些数据输出到控制台,我发现当更改为 null时 DataTemplateSelector 不会运行。Current但是,当它也为空时,它第一次运行。所以我不明白为什么会这样。有人有这个问题或类似的问题吗?

4

1 回答 1

2

当您取消选择该项目时,列表框的选定项目变为空,因此绑定到Current找不到该属性。

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

我假设您以某种方式绑定到选定的项目(无论是直接从列表框还是通过视图模型路由)。就像是:

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

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

在内容控制:

Content="{Binding }"

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

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

于 2013-05-06T06:05:10.547 回答