Windows phone 7 WP7-无法从两个页面数据绑定到同一对象 Page1创建一个新的Foo实例并将其数据绑定到该实例,称之为theFoo 通过第1页的文本框设置foo.Name foo被保存到一个全局可访问的foo数据结构列表中 从第1页导航到第2页 Page2数据绑定到全局Foo列表,以显示所有Foo实例

Windows phone 7 WP7-无法从两个页面数据绑定到同一对象 Page1创建一个新的Foo实例并将其数据绑定到该实例,称之为theFoo 通过第1页的文本框设置foo.Name foo被保存到一个全局可访问的foo数据结构列表中 从第1页导航到第2页 Page2数据绑定到全局Foo列表,以显示所有Foo实例,windows-phone-7,data-binding,Windows Phone 7,Data Binding,当我这样做时,我可以验证Foo实例是否已添加到全局列表中。但是第2页从来没有显示任何食物 如果我在代码中手动将Foos添加到全局列表中,而不是从Page1添加,然后导航到Page2而根本不导航到Page1,我会看到Foos显示在Page2中 这里有什么问题 更新: 这里有一些相关的代码 Item.cs数据和全局存储结构 相关Page2.xaml片段 在没有看到任何代码的情况下,很难确切地知道发生了什么,但我会尝试猜测。如果您在问题中添加一些代码,我会更有帮助。下面列出了可能出现的问题 foo列表

当我这样做时,我可以验证Foo实例是否已添加到全局列表中。但是第2页从来没有显示任何食物

如果我在代码中手动将Foos添加到全局列表中,而不是从Page1添加,然后导航到Page2而根本不导航到Page1,我会看到Foos显示在Page2中

这里有什么问题

更新:

这里有一些相关的代码

Item.cs数据和全局存储结构

相关Page2.xaml片段


在没有看到任何代码的情况下,很难确切地知道发生了什么,但我会尝试猜测。如果您在问题中添加一些代码,我会更有帮助。下面列出了可能出现的问题

foo列表实际上不是静态的,两个页面都可以全局访问,它们引用的是不同的列表。 您的Page1未成功更新Foo列表。 如果foo列表是一个可观察的集合,那么在某个地方您会不止一次地对其进行设置。 如果foo列表不是observetecollection,那么您没有在两个页面之间正确设置数据绑定。 更新: 尝试在Item.cs中使用以下项,而不是_项

public static ObservableCollection<Item> Items = new ObservableCollection<Item>();

您的全局数据结构的类型是什么?你到底是如何在里面添加foo的呢?它是一个列表,正如代码中定义的那样。如果我使用ObservableCollection,我也会遇到同样的问题。对不起,我以前没有看到这一行。试着做上面的修改,如果可以的话告诉我。不行,不行。我以前试过,但我又试了一次。我观察到的奇怪现象是,如果我在第2页设置断点并在调试器中检查items列表或ObservableCollection的内容,我会看到添加的项,但它是.Name属性值,会产生一个无法计算表达式的错误,这似乎很奇怪。如果我在代码中而不是在第1页中手动构造项并将它们添加到列表中,我在调试器中看不到这种行为。这让我相信Page1数据绑定在试图在Page2上显示项目实例时仍然会影响它。进度。。。如果我将Page1.xaml中的绑定标记更改为使用双向绑定,则Page2将正确显示从Page1添加的项目。我还不明白为什么默认的OneWay不能简单地将更改从目标文本框传播到源Item.Name属性。相反,它似乎使.Name属性值在从Page2请求时抛出错误。很明显,我仍然缺少一些简单的东西。如果绑定在第1页是单向的,那么name属性将始终为null,因为您没有在代码中设置它。因此,第2页上的DataTemplate内的绑定将失败,但应该会有一个错误,因为绑定会悄悄地失败。您得到的错误是什么?
<TextBlock Text="Name:"
           Grid.Row="0"
           Grid.Column="0"
           HorizontalAlignment="Right"
           VerticalAlignment="Center"
           Margin="5" />

<TextBox x:Name="txtName"
         Grid.Row="0"
         Grid.Column="1"
         HorizontalAlignment="Stretch"
         VerticalAlignment="Center"
         Text="{Binding Name}" />
public partial class ItemDetail : PhoneApplicationPage
{
    public ItemDetail()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo( NavigationEventArgs e )
    {
        base.OnNavigatedTo( e );

        this.DataContext = ItemRepos.New();
    }

    private void Nav( object sender, EventArgs e )
    {
        NavigationService.Navigate( new Uri( "/Page2.xaml", UriKind.RelativeOrAbsolute ) );
    }

    private void Save( object sender, EventArgs e )
    {
        ItemRepos.Save( (Item) this.DataContext );
    }
}
<controls:PivotItem Header="A-Z">
    <ListBox x:Name="listAZ"
             ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</controls:PivotItem>
public partial class ViewItems : PhoneApplicationPage
{
    public ViewItems()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo( NavigationEventArgs e )
    {
        base.OnNavigatedTo( e );

        this.DataContext = ItemRepos.GetAll();
    }
}
public static ObservableCollection<Item> Items = new ObservableCollection<Item>();
protected override void OnNavigatedTo( NavigationEventArgs e )
{
    base.OnNavigatedTo( e );

    this.DataContext = ItemRepos.Items;
}