我正在开发一个Windows Phome应用程序。我在页面上有以下ListBox:
<ListBox Margin="10,10,8,8" x:Name="WallList">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="ListBoxItemLayout" Background="Transparent" Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.33*"/>
<ColumnDefinition Width="0.77*"/>
</Grid.ColumnDefinitions>
<Image HorizontalAlignment="Left" Margin="0" Source="{Binding ImagePath}" Height="200"/>
<StackPanel Margin="5,0,0,0" Grid.Column="1">
<TextBlock x:Name="Name" TextWrapping="Wrap" Text="{Binding Name}" Style="{StaticResource PhoneTextTitle2Style}"/>
<TextBlock x:Name="Comment" Margin="0,5,0,0" TextWrapping="Wrap" Text="{Binding Comment}" Style="{StaticResource PhoneTextNormalStyle}" Height="130"/>
<TextBlock x:Name="When" TextWrapping="Wrap" Text="{Binding When}" Style="{StaticResource PhoneTextTitle3Style}" VerticalAlignment="Bottom"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我正在使用它来填充Loaded事件中的ListBox:
this.WallList.ItemsSource = StartingWall.GetWallPosts();
现在,当用户在TextBox上写下一些文本并单击按钮时,我想以编程方式添加更多项目。我想将此文本放在评论栏中。
我正在使用默认数据来填充其余字段。
我的问题是:
如何向WallList ListBox添加更多项目?
有人建议做以下事情:
public ObservableCollection<WallPostEntry> MyWallPosts {get;set;}
// Initialize MyWallPosts to whatever
MyWallPosts.Add(new WallPostEntry("new entry"));
<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}">
但是绑定ListBox ItemsSource对我不起作用。我正在构造函数上初始化MyWallPosts
,就在InitializeComponent();
之前,就像这样:
public Wall()
{
MyWallPosts = StartingWall.GetWallPosts();
InitializeComponent();
}
有什么建议吗?
感谢。
答案 0 :(得分:3)
我看到了几件奇怪的事情:
首先,您在一个地方使用itemssource绑定,但是在另一个地方显式设置它?在代码中设置内容将覆盖/撤消任何绑定,因此可能会导致问题(但看起来你将它设置为相同的东西,所以不应该有所作为,但我会删除this.WallList。 ItemsSource = StartingWall.GetWallPosts();完全调用,并在Xaml中保留ItemsSource =“{Binding MyWallPosts}”。使用绑定的目的是摆脱这种代码)
第二,您正在设置mywallposts并使用绑定,但不在对象本身上设置 datacontext ?在您的示例中,最简单的方法是在构造函数中添加一行:
public Wall()
{
DataContext = this;
MyWallPosts = StartingWall.GetWallPosts();
InitializeComponent();
}
我的下一个建议是简化直到它起作用。离开列表框但注释掉所有项目/数据模板,以确保您的模板中没有错误
答案 1 :(得分:0)
他可以添加吗? 一个DataContext属性:
<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}">
这样:
<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}" DataContext="{Binding MyWallPosts}">
是否可以通过声明方式设置dataContext?
TKS, 奥斯卡