2011-02-15 97 views
0

我试图创建一个动态绑定到一组日期的列表视图。因此,用户可以选择一个日期范围,所选日期的结果将显示在列标题中的日期。我只用一个问题就能解决所有问题,日期不会显示在标题中。我有,我看不出有任何理由为什么它不工作的情况如下:WPF LIstView绑定到列标题

public class KPIResult : DependencyObject 
{ 
    public static readonly DependencyProperty DateProperty = DependencyProperty.Register("Date", typeof(DateTime), typeof(KPIResult), new UIPropertyMetadata(null)); 

    public DateTime Date 
    { 
     get { return (DateTime)GetValue(DateProperty); } 
     set { SetValue(DateProperty, value); } 
    } 

    public static readonly DependencyProperty ResultProperty = DependencyProperty.Register("Result", typeof(int), typeof(KPIResult), new UIPropertyMetadata(null)); 

    public int Result 
    { 
     get { return (int)GetValue(ResultProperty); } 
     set { SetValue(ResultProperty, value); } 
    } 
} 

,代码为ListView:

<ListView Margin="6" ItemsSource="{Binding ElementName=This, Path=KPICollection}" Name="lvKPIView" Grid.ColumnSpan="2"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="40" > 
        <GridViewColumnHeader Tag="KPIResult[0]" Content="{Binding Path=KPIResults[0].Date}" /> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <Grid> 
           <TextBlock Text="{Binding Path=KPIResults[0].Result}" /> 
           <TextBox Text="{Binding Path=KPIResults[0].Result}" /> 
          </Grid> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

结果显示就好了。在标题:(只是没有日期

任何想法家伙

干杯, SumGuy

回答

4

试试这个方法:?

<ListView Margin="6" DataContext="{Binding ElementName=This}" ItemsSource="{Binding KPICollection}" Name="lvKPIView" Grid.ColumnSpan="2"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Width="40" > 
       <GridViewColumnHeader Tag="KPIResult[0]" Content="{Binding KPICollection.KPIResults[0].Date}" /> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <TextBlock Text="{Binding Path=KPIResults[0].Result}" /> 
          <TextBox Text="{Binding Path=KPIResults[0].Result}" /> 
         </Grid> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

显然,问题是,你正在试图绑定到一个没有指定绑定源的属性,并且没有将控件的DataContext设置为任何东西。绑定在CellTemplate工作中的原因是行的数据上下文自动设置为相应的列表项实例,但对于头文件,这不是真的 - 它们从父控件继承数据上下文。因此,如果我们为ListView指定DataContext,那么标头中使用的绑定将具有该数据上下文的相对路径:{Binding KPICollection.KPIResults[0].Date}