MVX包括一个例子服务,允许添加一些简单的活瓷砖/书签 - MvxWindowsPhoneLiveTileBookmarkLibrarian.cs
这是目前仅实施了WP7 - 但Android和WinRT的书签也可以使用相同的模板,未来有可能。
如果你想使用图书馆服务,你可以尝试这样的:
IMvxBookmarkLibrarian librarian;
if (!this.TryGetService<IMvxBookmarkLibrarian>(out librarian))
{
// not much can be done...
return;
}
var metadata = new BookmarkMetadata()
{
Title = detail.Name,
};
var uniqueName = "DetailBookmark" + detail.UniqueId;
librarian.AddBookmark(
typeof(DetailViewViewModel),
uniqueName,
metadata,
new Dictionary<string, string>()
{
{ "detailId", detail.UniqueId }
});
这将通过调用生成的TileData和XAML中的URI瓦WP7码 - 了解如何在URI生成,请参阅中的代码the librarian。
如果你想使用这个现有的样本服务“是”,那么目前在元数据中可用的字段有:
public Uri BackgroundImageUri { get; set; }
public string Title { get; set; }
public Uri BackBackgroundImageUri { get; set; }
public string BackTitle { get; set; }
public string BackContent { get; set; }
public int Count { get; set; }
,但这些领域诚然目前非常WP7具体的 - 例如,我怀疑Uri在不同的平台上可以重复使用的形象。
在实践层面上,当我开发任何需要大量定制活动拼贴的内容时 - 例如,下载的图像 - 然后我通常基于现有的代码建立一个新的简单书签服务器服务,并且这个自定义的代码位于该项目的WP7 UI代码中(并且被注入到ViewModel中的接口)
我发现这种定制方法书签API更加简单,它允许我在WP7应用程序项目(而不是共享核心项目)内编写WP7特定的逻辑。
编写自定义书签服务的关键是明白的导航URI是如何在1产生的 - 看近GetXamlUriFor
编码 - URI是通过序列化MvxShowViewModelRequest
并添加指示唯一的查询参数创建此书签的名称。
当你以这种方式添加书签,那么你可以调整你的“正常”开始在WP7 App.xaml.cs导航代码是这样的:
RootFrame.Navigating += (innerSender, args) =>
{
if (!_firstNavigation)
return;
_firstNavigation = false;
var applicationStart = this.GetService<IMvxStartNavigation>();
if (args.Uri.ToString().Contains("MainPage.xaml")
|| !applicationStart.ApplicationCanOpenBookmarks)
{
args.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(applicationStart.Start);
}
};
此代码允许书签直接打开。
如果您需要运行任何代码(例如,一个代理)更新瓦片使其“生活”,那么你将不得不自己做这件事 - 恐怕目前没有任何样品可用......尽管我现在在非UI项目中使用了Mvx在Android和WP7中 - 所以我知道它可以做到!
感谢您的回答,但接下来会发生什么? 辅助瓷砖仍然在MasterView上导航,DetailViewModel在构造函数中有detailId参数... – manro 2012-07-19 19:43:44
Ahhh - 对不起 - 忘记了详细信息...将更新答案... – Stuart 2012-07-19 20:07:31
更新 - 对不起了(这不是我为几个月!) – Stuart 2012-07-19 20:09:27