DataBinding到Control

时间:2011-11-03 14:59:26

标签: silverlight data-binding binding

我正在将Silverlight与MVVM一起使用。

我有一个简单的LoginControl绑定到LoginControlViewModelLoginControl已创建并添加到我的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')

  

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

啊,我看到你的属性在一个不同的ViewModel上,而不是它的DataContext控件。

我过去所做的是将LoginControl放在另一个容器中(比如BorderStackPanel)然后你可以绑定Visibility小组到您的财产。这样LoginControl的DataContext保持LoginControlViewModel,可见性绑定很简单。

修改:Silverlight不支持以下方法。

或者您可以在查看其父级LoginControl的{​​{1}}上使用复杂的绑定:

DataContext

您绑定的财产也不是Visibility="{Binding Path=DataContext.LoginVisible, RelativeSource={RelativeSource FindAncestor, AncestorType=MasterPage}, Converter={StaticResource BoolConverter}}" 而不是LoginVisible的财产吗?或者问题就是这个问题?