Silverlight标签内容绑定问题

时间:2009-12-17 16:44:09

标签: silverlight mvvm

我会在此前言,并说我是Silverlight开发的新手大约一周所以我很可能做错了...

无论如何,我在XAML中完成了一个Label和一个TextBox:

<dataInput:Label Target="{Binding ElementName=JobCode}" Height="18" HorizontalAlignment="Left" Margin="15,7,0,0" Name="lableJobCode" VerticalAlignment="Top" Width="250" FontWeight="Bold"  Grid.Column="1" />  
<TextBox Height="23" Text="{Binding SelectedRole.Job_Code}" HorizontalAlignment="Left" Margin="15,31,0,0" Name="JobCode" VerticalAlignment="Top" Width="277" Grid.Column="1" IsReadOnly="{Binding IsNotAdmin}" />   

一切都很好,我唯一的问题是我在IsReadOnly属性上做的绑定,它在我的ViewModel中的布尔值,它是基于对身份验证服务的调用而设置的,现在覆盖了标签Content到我的ViewModel属性的名称:IsNotAdmin。我似乎无法找到一种方法来指定从哪个数据绑定源拉取标签内容MetaData。也许我错过了关于如何从我的ViewModel操纵控制editablity / visibility的事情。

- 更新:TextBox绑定的数据源类如下​​(对于相关部分):

public class RoleSummary {

    [Display(Name= "Job Code (To be Completed by HR):")]
    public string Job_Code { get; set; }  

如果没有绑定到IsReadOnly属性,Label会很好地显示数据注释中的文本。当我添加绑定时,它显示“IsNotAdmin”

1 个答案:

答案 0 :(得分:1)

你可以发布更多代码吗?我不完全确定你想要实现的是什么,所以很难提出解决方案。

我假设您正在尝试创建一个对其执行验证的文本输入元素(因此标签) - 但该标签应该为其内容显示的确切内容是什么?

编辑:我想出来了。默认情况下,标签控件会查看其datacontext中的所有属性,以查找它可以使用的元数据。无论出于何种原因,它决定在代码中使用IsNotAdmin属性的元数据(即使您没有手动设置它,我假设显示元数据获取属性名称的默认值),因此您可以获得标签的文字。

Microsoft在数据控件中添加了属性说明符,因此您可以告诉它应该使用哪个属性进行元数据查找:PropertyPath

试试这样:

<dataInput:Label Target="{Binding ElementName=JobCode}" PropertyPath="SelectedRole.Job_Code" Height="18" HorizontalAlignment="Left" Margin="15,7,0,0" Name="lableJobCode" VerticalAlignment="Top" Width="250" FontWeight="Bold"  Grid.Column="1" />  
<TextBox Height="23" Text="{Binding SelectedRole.Job_Code}" HorizontalAlignment="Left" Margin="15,31,0,0" Name="JobCode" VerticalAlignment="Top" Width="277" Grid.Column="1" IsReadOnly="{Binding IsNotAdmin}" />

只要你的datacontext是正确的(应该是这样),这应该对你有用 - 它在我从你的代码中重建的样本中起作用。