将ObservableCollection(或LinkedList)绑定到WrapPanel的WPF数据
本文关键字:WrapPanel WPF 数据 绑定 ObservableCollection LinkedList | 更新日期: 2024-09-12 15:53:30
好的。首先,我在互联网上看了很多关于如何做到这一点的其他问题和其他地方,但都没有帮助,所以请不要将其标记为重复,而且,请注意,我可能犯了一个非常愚蠢的错误。
我正在尝试使用ItemsControl
和DataTemplate
将ObservableCollection
绑定到WrapPanel
。以下是我的XAML代码:
<ItemsControl x:Name="wPanel">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--<Border BorderBrush="DarkGray" Background="Transparent">-->
<StackPanel MinWidth="250">
<Grid>
<TextBlock Text="{Binding address}" />
</Grid>
<Grid>
</Grid>
</StackPanel>
<!--</Border>-->
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
注意:我确实有(对于ItemsControl的ItemsSource属性){Binding properties}
这是我对properties
:的声明
public ObservableCollection<Property> properties = new ObservableCollection<Property>();
属性类是以下加上更多属性:
private string address { get; set; }
private string city { get; set; }
private string postcode { get; set; }
private double price { get; set; }
private LinkedList<Tennant> tennants { get; set; }
...
我以为我已经解决了这个问题,
Binding binding = new Binding();
binding.Source = properties;
wPanel.SetBinding(ItemsControl.ItemsSourceProperty, binding);
但是,xaml:<TextBlock Text="{Binding address}" />
中的行不起作用。
然后我得出结论,这与属性对象有关,以及除非我通过代码进行绑定,否则它不会绑定。
我做错了什么,因为它没有通过XAML等绑定。?关于properties对象,我需要更改什么,或者我需要做什么?
提前谢谢。
您可以将ItemsControl的ItemsSource绑定到属性,就像@Ajsanswer一样。但在此之前,您需要将属性声明更改为属性而不是字段。
public ObservableCollection<Property> properties { get; set; }
并且Property
类的地址属性也需要是公共的。
public string address { get; set; }
"properties"不是窗口上的属性吗?如果您在xaml中绑定,请确保使用声明"properties"作为"Property",将窗口的datacontext设置为自身,然后设置绑定路径:-
<ItemsControl x:Name="wPanel" ItemsSource="{Binding properties}">
this.DataContext=this; //set datacontext on parent window or control
如果您在代码中执行此操作,那么直接在wPanel上设置ItemsSource应该可以:-
wPanel.ItemsSource=properties;
这是检查Binding
的简单技巧。每个WPF开发人员都必须知道这一点。例如:
<TextBlock Text="{Binding}" />
跑过去看看。
如果TextBlock
在DataContext中有任何对象,则object class name
显示在TextBlock中。如果DataContext
为空。TextBlock是Empty