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

时间:2013-12-12 07:41:44

标签: c# wpf xaml data-binding properties

确定。首先,我已经看了一堆其他问题以及互联网上的大量其他地方如何做到这一点,而且没有一个在帮助,所以请不要将其标记为重复,并且,抬头因为我可能犯了一个非常愚蠢的错误。

我正在尝试使用ObservableCollectionWrapPanelItemsControl绑定到DataTemplate。以下是我的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>();

Property Class是以下以及更多属性:

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绑定等等?我需要更改有关属性对象的内容,或者我需要做什么?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以将ItemsControl的ItemsSource绑定到属性,就像@AjS回答一样。但在此之前,您需要将属性声明更改为属性而不是字段。

public ObservableCollection<Property> properties { get; set; } 

并且您的Property课程的地址属性也需要公开。

public string address { get; set; }

答案 1 :(得分:1)

窗口上的'属性'不是属性吗? 如果你在xaml中绑定,请确保使用声明'properties'作为'Property',将window的datacontext设置为自身,然后设置绑定路径: -

         <ItemsControl x:Name="wPanel" ItemsSource="{Binding properties}">
           this.DataContext=this;  //set datacontext on parent window or control

如果您在代码中执行此操作,则直接在wPanel上设置ItemsSource应该可以: -

           wPanel.ItemsSource=properties;

答案 2 :(得分:0)

这是检查Binding的简单方法。每个WPF开发人员都必须知道这一点例如:

<TextBlock Text="{Binding}" />

运行并查看它。

如果TextBlock在DataContext中有任何对象,则TextBlock中会显示object class name。 如果DataContext为空。 TextBlock是Empty