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 是如何生成的,请参阅librarianGetXamlUriFor
中的代码。
如果您想“按原样”使用这个现有的示例服务,那么元数据中当前可用的字段是:
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 的图像将在不同平台上非常可重用。
在实践层面上,当我开发任何需要大量自定义动态磁贴的东西时——例如下载的图像——然后我通常会基于现有代码构建一个新的简单 BookmarkLibrarian 服务,这个自定义代码位于 WP7 UI 代码中该项目(并且是注入 ViewModel 的接口)
我发现这种定制方法使书签 API 更加简单,它允许我在 WP7 应用程序项目中(而不是在共享核心项目中)编写特定于 WP7 的逻辑。
编写自定义书签服务的关键是了解导航 uri 是如何生成的1 - 参见附近的代码GetXamlUriFor
- 通过序列化 anMvxShowViewModelRequest
并添加一个指示此书签唯一名称的查询参数来创建 uri。
当您以这种方式添加书签后,您可以将 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);
}
};
此代码允许直接打开书签。
如果您需要运行任何代码(例如代理)来更新磁贴以使其“生效”,那么您必须自己执行此操作 - 恐怕现在没有任何可用的示例......虽然我现在在 Android 和 WP7 的非 UI 项目中都使用了 Mvx - 所以我知道它可以做到!