System.Windows.Data错误:40:BindingExpression路径错误:

时间:2015-05-28 13:55:01

标签: c# .net wpf xaml

真烦人的问题。代码似乎工作正常,但运行时,我看到这个错误被抛出:

  

System.Windows.Data错误:40:BindingExpression路径错误:' IsOpen'   在' object'上找不到的属性'' MainViewModel' (的HashCode = 33664731)&#39 ;.   BindingExpression:路径= ISOPEN;的DataItem =' MainViewModel'   (的HashCode = 33664731);目标元素是' Popup' (名称=' LoginPopup&#39);   目标财产是'IsOpen' (键入'布尔')

我理解存在某种问题,即在MainViewModel上尝试使用LoginPopup绑定的IsOpen属性并失败,因为MainViewModel中没有IsOpen属性。很好,但DataContext我绑定的不是mainviewmodel,而是LoginPopupViewModel(ViewModelLocator类中的LoginPopup)。 Intellisense似乎同意我的看法,事情与LoginPopupViewModel绑定,好像我在IsOpen的Binding部分输入其他东西,它抱怨说,"无法解析LoginPopupViewModel"的数据上下文中的属性,因为它应该

这是XAML代码的一部分:

<Popup x:Name="LoginPopup"  PlacementTarget="{Binding ElementName=LoginButton}"  
       Placement="Bottom"
       HorizontalOffset="-40" VerticalOffset="35" StaysOpen="False" 
       IsOpen=" {Binding IsOpen}"
       DataContext="{Binding LoginPopup, Mode=OneWay, Source={StaticResource Locator}}" 
       Grid.ColumnSpan="3" Grid.Column="0"
           Margin="0,0,0.333,0"
           Grid.Row="0" Grid.RowSpan="2">

我不是WPF的主人,所以我可能遗漏了一些东西,或者sytax在这里错了。任何帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:1)

您收到该错误是因为DataContext绑定是在IsOpen绑定之后,所以当解析器遇到IsOpen时,DataContext当前是MainViewModel(设置通过依赖属性继承)。然后WPF处理DataContext={..}并重新评估IsOpen绑定。

E.g。 2个绑定最终相同,但一个显示错误

这会在输出中出错,但有效

    <TextBlock Text="{Binding TextB}" DataContext="{Binding B}"></TextBlock>

这不会给出错误

    <TextBlock DataContext="{Binding B}" Text="{Binding TextB}"></TextBlock>

原始答案

你得到的错误是因为:

IsOpen="{Binding IsOpen}"

无法成功绑定。

您将其DataContext绑定到{StaticResource Locator},并将该资源上的属性LoginPopup绑定。我假设Locator.LoginPopup返回MainViewModel

Locator.LoginPopup是什么IsOpen="{Binding IsOpen}"以及您想通过{{1}}实现什么目标?这是某个视图模型的属性吗?