0

これが私のコードです。何をしている。ブック名のテキストを含むテキストボックス(ボタン)が1つあります。クリックすると、バインディングを使用してテキストボックス内のテキストを変更できます。しかし、著者名用に別のテキストボックスを追加しましたが、それをバインドする方法がわかりません。ブック名のように同じ方法を使用すると、機能しないか、ブック名のテキストが本の著者にありすぎます。すべてのテキストは、ポップアップ設定ページを介して変更されます。

私の情報源はこちら: 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;
            };

           ...
4

2 に答える 2

0

OKラップパネルを使用していますが、問題はまだここにあります. 2 つのパノラマ アイテムがあり (アイテム 1 からコードを投稿し、アイテム 2 には同じコードがあり、2 番目のパノラマ ページにのみ表示されます)、パノラマ アイテム 1 のアイテムの 1 つに値を保存すると問題が解決しません。この値はパノラマ アイテムにもあります。 2 作り方がわかりません。ロジックは、パノラマ 1 項目をクリックすると panoam 1 項目の値が変更され、パノラマ 2 項目をクリックするとパノラマ 2 項目の値が変更されます。パノラマ アイテム 1 のように見えますが、パノラマ アイテム 2 と同じ ID を持っています。完全なソースは次のとおりです

<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 -->
于 2013-04-06T08:43:06.657 に答える
0

ああ、それは単純な間違いでした:)

PopupSettingsPage.xaml の 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");

あなたのコメントに基づく追加の回答:

それを実現するには、リストボックスの 2 番目のスタックパネルを削除する必要があります。代わりに、WrapPanel コントロールを使用してください。WindowsPhone の WrapPanel の使用方法を検索します。

そして、背景を赤または緑に設定する方法を見つけなければなりません。幸運を

于 2013-04-04T16:02:54.120 に答える