WPF如何从列表中填充包装面板

时间:2016-02-20 14:21:28

标签: wpf list wrappanel

我有一个完整的自定义对象列表。

我想要做的是填写一个usercontrols的包装面板,它是列表中每个对象的单独控件。

问题是:

该列表可以由另一个线程编辑,我该如何设置,以便在可见的用户控件中自动描述对列表的任何更改?

谢谢

2 个答案:

答案 0 :(得分:2)

只需将ObservableCollection绑定到ItemsSource ListView即可保留您的对象并设计所需的DataTemplate以显示objects的部分。确定你实现了INotifyPropertyChanged接口。

<ListView ItemsSource="{Binding FriendList}"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled"  >
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel></WrapPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListView>

答案 1 :(得分:0)

您可以绑定ListView的ItemsSource并定义ItemsPanel

<!-- MyControlsList is of type ObservableCollection -->
<ListView ItemsSource="{Binding MyControlsList}"
         ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel></WrapPanel>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
</ListView>

在视图模型中,您应该实现INotifyPropertyChanged接口并将ObservableCollection订阅到CollectionChanged事件。然后,只要您的集合发生更改,就可以引发PropertyChanged事件。

void MyControlsList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    OnPropertyChanged("MyControlsList");
}