<StackPanel Orientation="Vertical" x:Name="stackPanel">
<ItemsControl ItemsSource="{Binding C}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Black" Text="{Binding prop1}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
我用这段代码将这个堆栈面板绑定(bind)到一个列表
List<C> list = new List<C>();
for (int i = 0; i < 100; i++)
{
list.Add(new C() { prop1 = "prop" });
}
stackPanel.DataContext = list;
什么也没有发生。我们必须始终使用 ObservableCollection
吗?或者代码还有什么问题?
最佳答案
表达式 {Binding C}
没有意义,因为您将列表本身放入 DataContext 中。那么当然就没有属性C
了。
您应该将其替换为:
<ItemsControl ItemsSource="{Binding}">
也就是说,您实际上并不是将 StackPanel 绑定(bind)到项目集合,而是绑定(bind)到 StackPanel 内的 ItemsControl。如果您打算将 StackPanel 用作 ItemsControl 的 ItemsPanel
,您应该这样写:
<ItemsControl x:Name="itemsControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="Black" Text="{Binding prop1}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
并像这样设置 ItemsSource:
itemsControl.ItemsSource = list;
关于c# - 如何将 StackPanel 绑定(bind)到非 ObservableCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33124325/