Windows 8 网格应用程序中的自定义详细信息页面
本文关键字:自定义 详细信息 网格 应用程序 Windows | 更新日期: 2023-09-27 18:04:10
我创建了一个简单的C# Windows 8网格应用程序。
如果你不熟悉这个布局,这里有一个简短的解释:
链接
我想要的很简单 - 一些定制ItemDetailPages
.我希望能够单击GroupDetailPage
和GroupedItemsPage
上的某些项目并导航到自定义.xaml
文件,我可以在其中包含多个图像。
我确信有一种简单的方法可以做到这一点,但我错过了,我也确信这些信息对很多人都有用,所以我将在这个问题上提供赏金。
到目前为止,我一直在努力做到这一点:
我在SampleDataSource.cs
类中创建了一个CustomDataItem
:
/// <summary>
/// Generic item data model.
/// </summary>
public class CustomDataItem : SampleDataCommon
{
public CustomDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content, SampleDataGroup group)
: base(uniqueId, title, subtitle, imagePath, description)
{
this._content = content;
this._group = group;
}
private string _content = string.Empty;
public string Content
{
get { return this._content; }
set { this.SetProperty(ref this._content, value); }
}
private SampleDataGroup _group;
public SampleDataGroup Group
{
get { return this._group; }
set { this.SetProperty(ref this._group, value); }
}
}
但是,显然,增加了ObservableCollection
private ObservableCollection<SampleDataGroup> _allGroups = new ObservableCollection<SampleDataGroup>();
public ObservableCollection<SampleDataGroup> AllGroups
{
get { return this._allGroups; }
}
使用不同的数据类型是不可能的。那么在这种情况下我该怎么办?
多谢。
我有一个简单的网格应用程序;如何使组项目页面中的一个元素链接到自定义项目详细信息页面?
好的,让我们以使用 Visual Studio 中的"网格应用"模板时生成的应用为例。
组项目页面上元素的数据类是SampleDataItem
类。 您可以做的是添加某种类型的数据字段(bool
、int
或其他(来指示如何处理导航。 在此示例中,我们保持简单,因此我们添加一个bool
来指示导航是否为自定义导航。
public class SampleDataItem : SampleDataCommon
{
// add flag as last param
public SampleDataItem(String uniqueId, String title, String subtitle,
String imagePath, String description, String content, SampleDataGroup group,
bool isCustomNav = false)
: base(uniqueId, title, subtitle, imagePath, description)
{
this._content = content;
this._group = group;
this.IsCustomNav = isCustomNav;
}
// to keep it simple this doesn't handle INotifyPropertyChange,
// as does the rest of the properties in this class.
public bool IsCustomNav { get; set; }
...
}
因此,当您添加新的SampleDataItem
对象时,您只需在构造函数中设置isCustomNav
字段。
现在,我们所要做的就是更改分组项目页面 (GroupedItemsPage.xaml.cs( 网格中已经存在的单击事件处理程序:
void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{
// Navigate to the appropriate destination page, configuring the new page
// by passing required information as a navigation parameter
var item = (SampleDataItem)e.ClickedItem;
var itemId = item.UniqueId;
if (item.IsCustomNav == false)
{
// default
this.Frame.Navigate(typeof(ItemDetailPage), itemId);
}
else
{
// custom page
this.Frame.Navigate(typeof(ItemDetailPage2), itemId);
}
}
我们上面所做的只是获取所选项目,然后测试我们之前添加的导航标志。 基于此,我们导航到原始ItemDetailPage
或名为 ItemDetailPage2
.正如我之前提到的,导航标志不一定是bool
。 它可以是int
或enum
或其他类型,告诉我们在哪里导航。
请注意,如果您希望在GroupDetailsPage
上具有类似的行为,则只需以相同的方式更新单击事件处理程序即可。
希望有帮助。
是的,您应该能够创建自定义或不同的数据类型。如果使用网格模板创建 Win8 应用,则会看到该模板为你执行三项操作:1(它创建三种类型,SampleDataCommon,它是基础,SampleDataItem,它实现SampleDataCommon并添加两个新属性 - 内容和组,以及SampleDataGroup,它也实现SampleDataCommon,添加一个方法ItemsCollectionChanged,并添加两个属性,Items和TopItems。2(它创建一个名为SampleDataSource的类,其中创建了SampleDataGroup的集合并命名为AllGroups:ObservableCollection AllGroups。3(它将采样数据源的项目和所有组绑定到XMAL页面中的对象。
在您的情况下,使用相同的数据结构。换句话说,您将创建一个包含项目等的组。