没有绑定错误但仍然绑定没有显示任何内容?

时间:2010-01-16 18:26:31

标签: wpf data-binding listview binding properties

我需要在xaml / code中更改哪些内容才能使绑定properties => SchoolclassName and LessonName同时适用于TextBlock?我没有得到Binding错误,但我没有看到任何显示:

<Grid Margin="20" Height="300" Background="AliceBlue">
    <ListView ItemsSource="{Binding Timetable}">
        <ListView.View>
            <GridView>                    
                <GridView.Columns>                             
                    <GridViewColumn Header="Period"
                                    DisplayMemberBinding="{Binding LessonPeriod}"/>
                    <GridViewColumn Header="Monday">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ListView ItemsSource="{Binding Monday}">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel Width="150" Orientation="Horizontal">
                                                <TextBlock Text="{Binding LessonName}"/>
                                                <TextBlock Text=" "/>
                                                <TextBlock Text="{Binding SchoolclassName}"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>  
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>


public partial class Window1 : Window
{
    List<TimetableEntry> _timetable = new List<TimetableEntry>();

    public List<TimetableEntry> Timetable
    {
        get { return _timetable; }
        set { _timetable = value; }   


    public Window1()
    {
        InitializeComponent();

        _timetable.Add(new TimetableEntry()

                            {
                                LessonPeriod = "Period 1",
                                Monday = new TimetableDay()
                                {
                                    LessonName = "Maths" ,
                                    SchoolclassName = "1c",                                        
                                },

                            }
                       );

        this.DataContext = this;
    }


    public class TimetableEntry
    {
        public string LessonPeriod { get; set; }
        public TimetableDay Monday { get; set; }
        public TimetableDay Tuesday { get; set; }
        public TimetableDay Wednesday { get; set; }
        public TimetableDay Thursday { get; set; }
        public TimetableDay Friday { get; set; }
        public TimetableDay Saturday { get; set; }
        public TimetableDay Sunday { get; set; }
    }

    public class TimetableDay
    {
        public string LessonName { get; set; }
        public string SchoolclassName { get; set; }
    }

    public class TimetableLesson
    {
        public string LessonName { get; set; }
        public string SchoolclassName { get; set; }
        public DateTime LessonTime { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

您将内部ListView的ItemsSource设置为Monday属性。但是星期一是TimetableDay,而不是集合,所以内部列表视图没有“列表”可以枚举。

您可能只想摆脱内部ListView,并使用Monday属性的子属性直接将TimeTemplate绑定到TimetableEntry:

<GridViewColumn.CellTemplate>
  <DataTemplate>
    <StackPanel Width="150" Orientation="Horizontal">
      <TextBlock Text="{Binding Monday.LessonName}" />  <!-- note multipart path -->
      <TextBlock Text=" " />
      <TextBlock Text="{Binding Monday.SchoolclassName}" />
    </StackPanel>
  </DataTemplate>
</GridViewColumn.CellTemplate>