2013-04-04 59 views
0

這是我的代碼。它在做什麼。我有一個帶有文本書名的文本框(按鈕),當我點擊它時,我可以使用綁定來更改文本框中的文本。但現在我添加另一個文本框的作者姓名,我不知道如何綁定它。如果我使用相同的方法來處理書名,它不起作用或書名中的文本也在書籍作者中。所有文本都通過彈出設置頁面進行更改。使用列表框的Windows Phone 8應用程序中的數據綁定

我的源代碼:https://dl.dropbox.com/u/40039421/App1.rar。 的形象在這裏:https://dl.dropbox.com/u/40039421/helpp.png

public partial class MainPage : INotifyPropertyChanged 
{ 
    private ObservableCollection<Book> _books = new ObservableCollection<Book>(); 
    public ObservableCollection<Book> AllBooks 
    { 
     get { return _books; } 
     set { _books = value; } 
    } 

    ... 

    private void InitializeData() 
    { 

     var bookName1 = new Book { Id = 1, BookName = "Small red apple",AuthorName = "Daniel"}; 
     ... 

     AllBooks.Add(bookName1); 
     ... 

     OnPropertyChanged("AllBooks"); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(null, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private void btnGreenBook_Click(object sender, RoutedEventArgs e) 
    { 
     var button = sender as Button; 
     if (button != null) 
     { 
      Popup popup = new Popup(); 
      popup.VerticalOffset = 30; 
      PopupSettingPage control = new PopupSettingPage(); 
      popup.Child = control; 
      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; 
        book.OnPropertyChanged("BookName"); 

       } 

       popup.IsOpen = false; 
      }; 

      ... 

回答

0

喔親愛的,這是一個簡單的錯誤:)

你忘了加上AUTHORNAME在你的XAML中PopupSettingsPage.xaml

<TextBox x:Name="tbInputAuthorName" Text="{Binding AuthorName, Mode=TwoWay}" VerticalAlignment="Center"/> 

然後在MainPage do

book.BookName = control.BookName; 
book.OnPropertyChanged("BookName"); 
book.AuthorName = control.AuthorName; 
book.OnPropertyChanged("AuthorName"); 

Additional answe r根據您的意見:

爲了實現這一點,您必須刪除列表框中的第二個堆棧面板。相反,使用WrapPanel控件。搜索如何使用WindowsPhone的WrapPanel。

然後你必須找到一些方法來設置背景爲紅色或綠色。祝你好運

+0

好thx男人現在它的好。 Im初學者,我不能找到很好的教程綁定更多的項目。我可以問你,也許你會知道在哪裏是問題,爲什麼我有紅色和綠色按鈕相同的值(文本)? – 2013-04-04 16:26:52

+0

您正在將redbox和greenbox的Databinding設置爲Xaml中的相同BookName和AuthorName。你在那裏預期的行爲是什麼? – nkchandra 2013-04-05 15:40:55

+0

我想要紅色框中的不同文字和綠色框中的不同文字。例如,我點擊彈出式菜單中的紅色框,然後保存並設置名稱和值,只在紅色框中顯示值。與綠色框相同,所有保存在綠色框中的值只應在綠色框中顯示。現在它的相同值ib綠框和相同的值我紅框它的壞。 – 2013-04-05 16:14:41

0

好吧我用包裝面板但問題仍在這裏。我有兩個全景項目(我從項目1發佈代碼,項目2只在第二個全景圖頁面上顯示相同的代碼),如果我將某個值保存到全景項目1中的某個項目,問題仍然存在。此值也在全景項目中2,我不知道如何使它。邏輯是點擊全景1項目更改值panoam 1項目,點擊全景2項目更改全景2項目值。它看起來像全景項目1有相同的ID像全景項目2.這裏是全部來源:https://dl.dropbox.com/u/40039421/App1SecondEdit.rar

<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 --> 
+0

問題修復。我用新的名字創建另一個全景項目。 – 2013-04-07 10:35:05

相關問題