真烦人的问题。代码似乎工作正常,但运行时,我看到这个错误被抛出:
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在这里错了。任何帮助都会很棒!谢谢!
答案 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}}实现什么目标?这是某个视图模型的属性吗?