2011-03-23 100 views
0

有一个网格视图,列出来自类属性的东西。类有四个属性,其中三个我绑定到3列网格视图,最后一个属性绑定到另一个标签。WPF绑定到标签不起作用?

网格视图正在工作并绑定值,但Lable不是......原因是什么?

public class ProjectData 
{ 
    public string ProjectName {get;set;} 
     public string MachineName {get;set;} 
     public string MachineNumber {get;set;} 
     public string StatusDetail {get;set;} 
} 

这里是XAML:

<ListView 
      Grid.Row="1" 
      Grid.ColumnSpan="2" 
      Name="PrjtListView" 
      HorizontalContentAlignment="Stretch" 
      FontSize="15" Background="#FFF2F2B7" 
      BorderThickness="1" 
      ItemsSource="{Binding ProjectData}"> 
      <ListView.View> 
       <GridView AllowsColumnReorder="True" 
         ColumnHeaderToolTip="appconfig servers" 
         ScrollViewer.CanContentScroll="True"> 
        <GridViewColumn Header="Project Name" Width="400" 
            DisplayMemberBinding="{Binding ProjectName}" /> 
        <GridViewColumn Header="Build Machine" Width="150" 
            DisplayMemberBinding="{Binding MachineName}"/> 
        <GridViewColumn Header="Port number" Width="120" 
           DisplayMemberBinding="{Binding MachineNumber}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <UniformGrid Grid.Row="2" Grid.Column="1" VerticalAlignment="Center"> 
      <Button Content="add to cctray" Margin="0,0,5,0" 
        Command="{Binding AddToCCTray}"/> 
     </UniformGrid> 
     **<Label Grid.Row="2" Grid.Column="0" Name="lblTotalProjects" FontSize="12" FontStyle="Italic" 
Content="{Binding StatusDetail}"></Label>** 
       -->> This is not working 

这只是代码片段,如果需要的话我会给其他细节。

编辑:我们可以在同一个xaml文件中绑定两次相同的datacontext。一个用于某些其他控件,另一个用于其他控件

回答

2

我怀疑您设置的StatusDetail属性的值晚于创建控件。
因为auto-properties不支持任何更改通知,所以标签不会知道有一些数据,因此不会显示任何内容。
尝试为您的房产实施INotifyPropertyChanged。这可能会解决您的问题。

+0

我所实施的一切...其他三个属性的魅力,但最后的属性没有得到约束。我实现了OnPropertyChanged – PawanS 2011-03-23 08:19:59

+0

@GAPS:检查visual studio的输出窗口。如果存在绑定错误,您将在此窗口中看到该错误。我看到你已经给这个标签命名了。检查您是否没有为代码中的Content属性设置值。这将删除绑定。 – HCL 2011-03-23 08:21:23

+0

@GAPS:看看Jens(+1)的解决方案,可能就是这样,我忽略了其他属性用于构建项目的事实。 – HCL 2011-03-23 08:27:04

1

这可能是您在ListView范围内定义ItemsSource =“{Binding ProjectData}”并且您的标签不知道其绑定源的原因。将你的视图的“DataContext”设置为“ProjectData”实例,这可能会有所帮助。

+0

否... DataContext到ListView不起作用。即使这并不填充gridview也。 – PawanS 2011-03-23 08:17:55

+0

@GAPS您可以从ListView中保留ItemsSource =“{Binding ProjectData}”,并将View的DataContext添加到ProjectData,以便使标签绑定起作用。 – Arseny 2011-03-23 08:40:52

0

我总是把我结合{Binding Path="StatusDetail"}

希望有点帮助你。

+1

'{Binding Path =“StatusDetail”}''{Binding StatusDetail}'两者都是一样的 – PawanS 2011-03-23 08:39:00

1

该标签位于ListView之外,因此与您的网格的行不同,它具有不同的DataContext。

我猜你的当前DataContext有IList<ProjectData>叫做ProjectData,否则ItemsSource绑定会失败。如果这是真的,应该为哪个项目显示StatusDetail?如果此标签应显示在每个网格行中,则每个项目都应该出现一次,您需要为此创建一个新列。

另外,看看你的输出窗口。绑定错误提供了很好的错误信息。

+0

你是对的。如果我在ListView中添加StatusDetail,它的工作。所以再次分配DataContext作为ProjectData标签应该工作。但是''也不起作用。 – PawanS 2011-03-23 08:37:07

+0

@GAPS:不,它不应该工作。一个ListView需要一个IList(或IEnumerable?)的Items,为每一行生成一行并将此行的DataContext设置为Item。因此,将Label的DataContext设置为ListView的ItemsSource不应该具有所需的效果。 – Jens 2011-03-23 14:29:46

+0

那么该怎么做...同样的xaml文件可以有两个或两个以上的数据上下文吗? – PawanS 2011-03-23 15:13:53