将ObservableCollection(或LinkedList)绑定到WrapPanel的WPF数据

本文关键字:WrapPanel WPF 数据 绑定 ObservableCollection LinkedList | 更新日期: 2024-09-12 15:53:30

好的。首先,我在互联网上看了很多关于如何做到这一点的其他问题和其他地方,但都没有帮助,所以请不要将其标记为重复,而且,请注意,我可能犯了一个非常愚蠢的错误。

我正在尝试使用ItemsControlDataTemplateObservableCollection绑定到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对象,我需要更改什么,或者我需要做什么?

提前谢谢。

将ObservableCollection(或LinkedList)绑定到WrapPanel的WPF数据

您可以将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