WPF ListView 绑定到列标题

2024-02-18

我正在尝试创建一个动态绑定到一组日期的列表视图。因此,用户将能够选择一个日期范围,所选日期的结果将与列标题中的日期一起显示。我已经解决了所有问题,只有一个问题,日期没有显示在标题中。我有以下内容,我看不出它不起作用的任何原因:

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>

结果显示得很好。只是标题中没有日期:(。

大家有什么想法吗?

干杯, 苏姆盖伊


试试这个方法:

<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工作原理是行的数据上下文自动设置为相应的列表项实例,但标题并非如此 - 它们从父控件继承数据上下文。所以,如果我们指定DataContext为了ListView那么标头中使用的绑定将具有该数据上下文的相对路径:{Binding KPICollection.KPIResults[0].Date}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF ListView 绑定到列标题 的相关文章

随机推荐