首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RelativeSource BindingExpression错误

RelativeSource BindingExpression错误
EN

Stack Overflow用户
提问于 2015-04-13 16:24:18
回答 1查看 235关注 0票数 1

我在DataTemplate中为我的一个ViewModel类使用了WPF RelativeSource Binding,如下所示:

代码语言:javascript
复制
<DataTemplate x:Type="{x:Type ViewModelB}">
     <Grid Visibility="{Binding DataContext.MyBoolProperty, 
                        RelativeSource={RelativeSource AncestorType=ContentControl}, 
                        Converter={StaticResource BooleanToVisibilityConverter}}">
     </Grid>
</DataTemplate>

根ViewModel ViewModelA将此ViewModel的一个实例作为公共属性,并为其提供一个DataTemplate,如下所示:

代码语言:javascript
复制
  <DataTemplate x:Type="{x:Type ViewModelA}">
      <ContentPresenter Content="{Binding ViewModelBProperty}" />
  </DataTemplate>

正如你所看到的,我希望ViewModelB视图上的一些东西是基于ViewModelA上的属性触发的VisibleHidden

这种方法工作得很好。

但是,ViewModelA本身也是用ContentPresenter表示的。当我更改此ContentPresenter的内容(例如更改为ViewModelC)时,在我的调试日志中会出现一些绑定异常,例如:

代码语言:javascript
复制
System.Windows.Data Error: 40 : BindingExpression path error: 'MyBoolProperty' property not found on 'object' ''ViewModelC' (HashCode=56562781)'. BindingExpression:Path=DataContext.MyBoolProperty; DataItem='ViewModelC' (Name=''); target element is 'Grid' (Name=''); target property is 'Visibility' (type 'Visibility')

我猜在这里,DataContext的Binding在实际的视图被释放之前被更新了。可以采取什么措施来修复此行为?

EN

回答 1

Stack Overflow用户

发布于 2015-04-13 16:43:37

我最终通过重写绑定逻辑修复了这段代码。绑定现在不再依赖于ViewModelA的属性。仍然有兴趣知道如何解决这样的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29600881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档