0

さまざまな要素 (ItemExplorer) を持つ GridView ページがあります。各要素には 2 つの TextBlocks (名前と説明) があり、コレクションにバインドされています。

単一の要素をクリックすると、名前や説明などのアイテムの詳細 (ItemViewer) を含む新しいページが開かれるようにしたい...

私はC#が初めてなので、助けやサポートに感謝します! :)

これは私の現在のコードです:

ItemExplorer.xaml:

<GridView ItemsSource="{Binding ItemList}">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Border DoubleTapped="GoToItemViewer_DoubleTapped">
                <StackPanel>
                    <TextBlock Name="ItemName" Text="{Binding ItemName}"/>
                    <TextBlock Name="ItemDescription" Text="{Binding ItemDescription}"/>
                </StackPanel>
            </Border>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

ItemExplorer.xaml.cs:

namespace Test001.Pages
{
    public sealed partial class ItemExplorer : Page
    {
        public ItemCollection MyItemCollection;

        public ItemExplorer()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
           MyItemCollection = new ItemCollection();
           this.DataContext = MyItemCollection;
        }

        // Go to ItemViewer
        private void GoToItemViewer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
        {
            if (this.Frame != null)
            {
                // SEND THE ITEM DETAILS AS PARAMTER TO ITEMVIEWER
                this.Frame.Navigate(typeof(ItemViewer));

            }
        }
    }
}

ItemCollection.cs

Collectionnamespace Test001.DataSource
{
    public class CollectionFiles: BindableBase
    {
        private ItemCollection _ItemList = new ItemCollection();

        public ItemCollection ItemList
        {
            get { return _ItemList; }
            set { SetProperty(ref _ItemList, value); }
        }

        public CollectionFiles()
        {
            _ItemList.Add(new FileModel()
            {
                ItemName = "ItenName0",
                ItemDescription = "Iten Description0",
            });

            _ItemList.Add(new FileModel()
            {
                ItemName = "ItenName1",
                ItemDescription = "Iten Description1",
            });

            _ItemList.Add(new FileModel()
            {
                ItemName = "ItenName2",
                ItemDescription = "Iten Description2",
            });

            _ItemList.Add(new FileModel()
            {
                ItemName = "ItenName3",
                ItemDescription = "Iten Description3",
            });
        }
    }
}

ItemViewer.xaml.cs

namespace mydox104.Pages
{
    public sealed partial class DocumentViewer : mydox104.Common.LayoutAwarePage
    {
        public DocumentViewer()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

            // GET THE ITEM DETAILS
            string file_name = e.Parameter as string;

            if (!string.IsNullOrWhiteSpace(file_name))
            {
                pageTitle.Text = file_name;
            }
            else
            {
                pageTitle.Text = e.Parameter.ToString();
            }
        }
    }
}

ItemViewer.xaml

<Grid Height="225">
    <TextBlock x:Name="Item-Name" Text=""/>
    <TextBlock x:Name="Item-Description" Text=""/>
</Grid>
4

1 に答える 1

1

GridView で設定します。

<GridView IsItemClickEnabled="True" ItemClick="ItemClicked" ItemsSource="{Binding ItemList}">

ItemExplorer.xaml.cs で

private void ItemClicked(object sender, ItemClickEventArgs e)
{
    var clickedItem = e.ClickedItem as ItemCollection;
    if (clickedItem != null )
    {
       this.Frame.NavigateTo(typeof(ItemViewer), clickedItem);
    }
}

ItemViewer.xaml.cs で

 protected override void OnNavigatedTo(NavigationEventArgs e)
{
 ItemCollection myElement = e.Parameter as ItemCollection;
 ...
}

代わりに ;public ItemCollection MyItemCollection;
を使用し ます。public ObservableCollection<FileModel> Items

何らかの形でお役に立てば幸いです。ただし、MVVM パターンについて調べることをお勧めします。WPF/WinRT アプリケーションの開発に非常に役立ちます。(クラス間で「オブジェクト/メッセージを送信する」機能を持つ、たとえば Messanger クラスを提供する MVVM Light フレームワークも確認してください)。

于 2013-02-20T15:10:55.717 に答える