Привязка WPF LIstView к заголовкам столбцов - PullRequest
0 голосов
/ 15 февраля 2011

Я пытаюсь создать представление списка, которое динамически связывается с набором дат.Таким образом, пользователь сможет выбрать диапазон дат, и результаты для выбранных дат будут отображаться с датой в заголовке столбца.У меня все это работает только с одной проблемой, даты не отображаются в заголовке.У меня есть следующее, что я не вижу причин, почему это не работает:

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

1 Ответ

4 голосов
/ 15 февраля 2011

Попробуйте следующим образом:

<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}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...