如何从GridView中的ItemCollection获取项目详细信息

时间:2013-02-20 14:50:30

标签: c# wpf windows-8 winrt-xaml

我有一个包含不同元素的GridView页面(ItemExplorer)。每个元素都有两个TextBlocks(Name& Description),它们绑定到Collection。

我希望当我单击一个元素时,应该使用项目详细信息(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>

1 个答案:

答案 0 :(得分: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应用程序时非常有用。 (另请参阅MVVM Light框架,它提供了实例Messanger类 - 它具有在类之间“发送对象/消息”的能力)。