C# Windows Phone 7:将集合绑定到列表框,以便集合项中的更改在列表框中更新

C# Windows Phone 7:将集合绑定到列表框,以便集合项中的更改在列表框中更新,c#,windows-phone-7,C#,Windows Phone 7,很抱歉,如果这是基本的,但我还没有找到一个好的例子来准确描述我需要做什么来启用以下场景: 我有两门课: 公共类对象:DependencyObject { 和一个包含对象的类 公共类事物:DependencyObjectCollection { MainPage.xaml.cs文件创建两个Thing对象,并将它们添加到Things集合中 公共部分类主页:PhoneApplicationPage { 事物=新事物 我的问题是如何编写绑定代码,使ListBox显示Things对象中包含的内容,并且当T

很抱歉,如果这是基本的,但我还没有找到一个好的例子来准确描述我需要做什么来启用以下场景:

我有两门课:

公共类对象:DependencyObject {

和一个包含对象的类

公共类事物:DependencyObjectCollection {

MainPage.xaml.cs文件创建两个Thing对象,并将它们添加到Things集合中

公共部分类主页:PhoneApplicationPage { 事物=新事物

我的问题是如何编写绑定代码,使ListBox显示Things对象中包含的内容,并且当Thing对象的DependencyProperty计数更改时,ListBox中作为字符串的Thing对象的显示会自动更新

具体来说,我应该如何执行以下XAML来实现上述场景。
也就是说,当我向Things对象添加一个新的Thing对象时,列表框中会添加一个新项目。当我使用Things对象更改现有项目时,更改会显示在列表框中

在Windows Phone 7中,主页面包含一个列表框:

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel>
            <ListBox x:Name="ThingsBox" />
            <Button x:Name="Action" Content="Action" Click="Action_Click"/>
        </StackPanel>
    </Grid>
</Grid>


< /代码> 如果您想以任何方式使用绑定,您应该考虑更多的MVVM模式,

即使没有它,也可以绑定到对象

//code behind main page
Things ThingCollection { get; set }


//in xaml
<MainPage x:Name="_mainPage">

    <ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>
//主页后面的代码
ThingThingCollection{get;set}
//在xaml中

这是一个简单的示例,但基本上是在xaml中要做什么。

首先,我建议为您的模型使用普通的旧对象(实现<代码>INotifyPropertyChanged
)。使用依赖项对象太过分了。请参阅此相关问题:

为了将对象集合绑定到列表,以便在添加/删除对象时UI自动更新,您应该创建一个
ObservableCollection
,并将其设置为
列表框的
项源

ObservableCollection<Thing> ThingsCollection { get; set }

<MainPage x:Name="_mainPage">
    <ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>
observeCollection thingscolection{get;set}
这里的关键是
ObservableCollection
实现了
INotifyCollectionChanged
,它在集合更改时引发事件。
列表框
处理这些事件以保持UI同步

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel>
            <ListBox x:Name="ThingsBox" />
            <Button x:Name="Action" Content="Action" Click="Action_Click"/>
        </StackPanel>
    </Grid>
</Grid>
//code behind main page
Things ThingCollection { get; set }


//in xaml
<MainPage x:Name="_mainPage">

    <ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>
ObservableCollection<Thing> ThingsCollection { get; set }

<MainPage x:Name="_mainPage">
    <ListBox ItemsSource="{Binding ThingsCollection}" />
</MainPage>