Silverlight标签内容绑定问题

Silverlight标签内容绑定问题,silverlight,mvvm,Silverlight,Mvvm,我将在这篇文章的前言中说,大约一周前我对Silverlight开发是新手,所以我很可能做错了 无论如何,我有一个标签和一个文本框,用XAML完成: <dataInput:Label Target="{Binding ElementName=JobCode}" Height="18" HorizontalAlignment="Left" Margin="15,7,0,0" Name="lableJobCode" VerticalAlignment="Top" Width="250" Font

我将在这篇文章的前言中说,大约一周前我对Silverlight开发是新手,所以我很可能做错了

无论如何,我有一个标签和一个文本框,用XAML完成:

<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属性,则标签可以很好地显示数据注释中的文本。当我添加绑定时,它会显示“IsNotAdmin”

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

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

编辑:我想出来了。默认情况下,label控件查看其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是正确的(它应该是正确的),这应该对您有用——它在我从您的代码重建的示例中有效。

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

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

编辑:我想出来了。默认情况下,label控件查看其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是正确的(它应该是正确的),这应该对您有效——它在我从您的代码重构的示例中有效。

Hi——文本框的数据源将Display(name=)data annotation属性应用于Job_code属性,并设置为“Job code(由HR完成)”如果我删除IsReadOnly属性上的绑定,就会很好地显示这一点。当我在标签中添加绑定时,显示“IsNotAdmin”Hi——文本框的数据源具有应用于Job_Code属性的Display(name=)data annotation属性,并设置为“Job Code(由HR完成)”,如果我删除IsReadOnly属性上的绑定,这将非常好地显示。当我在标签显示“IsNotAdmin”中添加绑定时,请参阅下面的我的编辑,这应该会解决此问题。请参阅下面的我的编辑,这应该会解决此问题。