我正在将Silverlight与MVVM一起使用。
我有一个简单的LoginControl
绑定到LoginControlViewModel
。 LoginControl
已创建并添加到我的MasterPage
。
当用户登录我的应用时,按LoginControl
上的登录BUtton,LoginControlViewModel
会将事件发送回MasterPageControlViewModel
。此时,MasterPageControlViewModel.LoginVisible
属性设置为False
。
我遇到的问题是MasterPageView
的XAML,因为我不知道如何将LoginControl绑定到MasterPageControlViewModel.LoginVisible
属性。以下不起作用。
<Controls:Login x:Name="LoginControl" Style="{StaticResource LoginControlStyle}"
Visibility="{Binding LoginControlVisibility, Converter={StaticResource BoolConverter}}" />
输出窗口说明如下:
System.Windows.Data错误:BindingExpression路径错误:'Silverlight.Controls.LoginControlViewModel''Silverlight.Controls.LoginControlViewModel'(HashCode = 43749873)上找不到'LoginControlVisibility'属性。 BindingExpression:Path ='LoginControlVisibility'DataItem ='Silverlight.Controls.LoginControlViewModel'(HashCode = 43749873); target元素是'Controls.Login'(Name ='LoginControl'); target属性为'Visibility'(类型'System.Windows.Visibility')
知道如何解决这个问题吗?
答案 0 :(得分:0)
啊,我看到你的属性在一个不同的ViewModel上,而不是它的DataContext控件。
我过去所做的是将LoginControl
放在另一个容器中(比如Border
或StackPanel
)然后你可以绑定Visibility
小组到您的财产。这样LoginControl
的DataContext保持LoginControlViewModel
,可见性绑定很简单。
修改:Silverlight不支持以下方法。
或者您可以在查看其父级LoginControl
的{{1}}上使用复杂的绑定:
DataContext
您绑定的财产也不是Visibility="{Binding Path=DataContext.LoginVisible,
RelativeSource={RelativeSource FindAncestor, AncestorType=MasterPage},
Converter={StaticResource BoolConverter}}"
而不是LoginVisible
的财产吗?或者问题就是这个问题?