【发布时间】:2011-03-28 01:56:44
【问题描述】:
我创建了一个Day 类:
public class Day
{
public int DayOfMonth
{
get { return dayOfMonth; }
}
public List<Entry> CalendarDayItems
{
get { return calendarDayItems; }
set { calendarDayItems = value; }
}
private DateTime date;
private int dayOfMonth;
private List<Entry> calendarDayItems;
public Day(DateTime date, List<Entry> entries)
{
this.date = date;
this.dayOfMonth = date.Day;
this.calendarDayItems = entries;
}
}
接下来,我创建了一个 WPF UserControl,我希望将天的集合绑定到 ItemsControl。我创建了一个依赖属性ObservableCollection<Day> Days,它绑定到ItemsControl。这是 XAML:
<UserControl ... Name="CalendarMonthViewControl">
...
<ItemsControl
ItemsSource="{Binding ElementName=CalendarMonthViewControl, Path=Days}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="6" Columns="7" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="Day">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<!-- The following two bindings don't work -->
<TextBlock
Grid.Column="0"
Text="{Binding Path=DayOfMonth}" />
<ItemsControl
Grid.Column="1"
ItemsSource="{Binding Path=CalendarDayItems}">
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
...
我有几个问题:
- 我是否使用正确的方法将依赖属性绑定到
ItemsControl,即是否建议命名控件,然后将其作为绑定源引用? - 主要问题是
TextBlock和第二个ItemsControl不会分别绑定到Day类的DayOfMonth和CalendarDayItems属性。
【问题讨论】:
-
@Boris 当你说“不会绑定”时,你的意思是你看不到这些属性的初始值(并且 VS 的输出窗口显示绑定错误)还是改变了这些属性不显示?
-
@grantnz 我的意思是当我运行应用程序时,
TextBlock和ItemsControl没有显示任何数据,DayOfMonth值和CalendarDayItems的列表没有显示。它们只是空白,但没有错误或异常。 -
就好像绑定试图在控件上找到这些属性,而不是在集合中的
Day项... -
如果您在调试器中运行您的应用程序,输出窗口中是否有任何绑定错误?
-
@Andy,输出窗口显示调试器中的错误。这使我找到了答案并使绑定工作。请发表您的评论作为答案,以便我将其标记为正确。