C# 使用ListBox在Windows Phone 8应用程序中进行数据绑定

C# 使用ListBox在Windows Phone 8应用程序中进行数据绑定,c#,windows-phone-7,data-binding,binding,C#,Windows Phone 7,Data Binding,Binding,这是我的密码。它在做什么。我有一个文本框(按钮)与教科书的名称,当我点击它,我可以改变文本框中的文字使用绑定。但现在我为作者姓名添加了另一个文本框,我不知道如何绑定它。若我使用和书名相同的方法,那个么它不起作用,或者书名中的文本也在书作者中。通过弹出式设置页面更改所有文本 我的来源在这里:。 图片如下: public分部类主页面:INotifyPropertyChanged { 私有ObservableCollection _books=新ObservableCollection(); 公共可观

这是我的密码。它在做什么。我有一个文本框(按钮)与教科书的名称,当我点击它,我可以改变文本框中的文字使用绑定。但现在我为作者姓名添加了另一个文本框,我不知道如何绑定它。若我使用和书名相同的方法,那个么它不起作用,或者书名中的文本也在书作者中。通过弹出式设置页面更改所有文本

我的来源在这里:。 图片如下:

public分部类主页面:INotifyPropertyChanged
{
私有ObservableCollection _books=新ObservableCollection();
公共可观察收集所有书籍
{
获取{return\u books;}
设置{u books=value;}
}
...
private void InitializeData()
{
var bookName1=新书{Id=1,BookName=“小红苹果”,AuthorName=“丹尼尔”};
...
添加(书名1);
...
不动产变更(“所有账簿”);
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(空,新PropertyChangedEventArgs(propertyName));
}
}
私有void btnGreenBook\u单击(对象发送者,路由目标e)
{
var按钮=发送方为按钮;
如果(按钮!=null)
{
Popup Popup=新的Popup();
popup.VerticalOffset=30;
PopupSettingPage控件=新建PopupSettingPage();
popup.Child=控件;
popup.IsOpen=true;
control.btnSave.Click+=(s,args)=>
{
var id=Convert.ToInt32(button.Tag);
var book=AllBooks.FirstOrDefault(sub=>sub.Id==Id);
if(book!=null)
{
book.BookName=control.BookName;
账面上的不动产变更(“账面名称”);
}
popup.IsOpen=false;
};
...

哦,亲爱的,这是一个简单的错误:)

您忘记在PopupSettingsPage.Xaml的Xaml中添加AuthorName

<TextBox x:Name="tbInputAuthorName" Text="{Binding AuthorName, Mode=TwoWay}" VerticalAlignment="Center"/>
基于您的评论的其他答案:

为了实现这一点,您必须删除列表框中的第二个stackpanel。相反,请使用WrapPanel控件。搜索如何使用WrapPanel for WindowsPhone


然后你必须找到一些方法将背景设置为红色或绿色。祝你好运

好的,我使用了包裹面板,但问题仍然存在。我有两个全景项目(我发布了项目1和项目2的代码,只有第二个全景页面上显示了相同的代码)问题仍然是,如果我将一些值保存到panorama项目1中的一个项目中,这个值在panorama项目2中太大了,我不知道怎么做。逻辑是单击panorama 1项目更改panorama 1项目中的值,单击panorama 2项目更改panorama 2项目值。它看起来像panoram项目1与panoram项目2具有相同的ID。这是完整资源e:



ok thx man现在一切正常。我是初学者,找不到绑定更多项目的好教程。我想问你,也许你会知道问题出在哪里,为什么我有相同的值(文本)在红色和绿色按钮中?您正在将redbox和greenbox的数据绑定设置为Xaml中相同的书名和AuthorName。您在那里的预期行为是什么?我希望红色框中有不同的文本,绿色框中有不同的文本。例如,我单击弹出窗口中的红色框,设置名称和作者,然后保存和设置值​​仅显示在红色框中。与绿色框相同,绿色框中保存的所有值应仅显示在绿色框中。现在,绿色框中的值相同,红色框中的值相同。问题已修复。我使用新名称创建了另一个全景项目。
<TextBox x:Name="tbInputAuthorName" Text="{Binding AuthorName, Mode=TwoWay}" VerticalAlignment="Center"/>
book.BookName = control.BookName;
book.OnPropertyChanged("BookName");
book.AuthorName = control.AuthorName;
book.OnPropertyChanged("AuthorName");
<Grid x:Name="LayoutRoot" Background="Transparent">
     <!--Panorama control-->
    <phone:Panorama>
        <!--Panorama item 1-->
        <phone:PanoramaItem Header="Test">
            <Grid x:Name="PanelPanoramaItem1" 
          Grid.Row="1"
          Margin="25,0,12,0">
                <ListBox ItemsSource="{Binding AllBooks}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <toolkit:WrapPanel Orientation="Vertical"/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                   <Button Width="140"
                            Height="140"
                            toolkit:TiltEffect.IsTiltEnabled="True" Margin="0,0,0,5" Click="Button_Click_1" Tag="{Binding Id}" >
                                            <Button.Template>
                                                <ControlTemplate>
                                                    <Grid Background="Chartreuse">
                                                        <TextBlock Foreground="Black" Text="{Binding BookName}" />
                                                    </Grid>
                                                </ControlTemplate>
                                            </Button.Template>
                                        </Button>

                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
            </Grid>
        </phone:PanoramaItem>
        <!-- END Panorama item 1 -->