2011-05-12 137 views
1

我正在使用Silverlight导航框架,其中有一个框架,其中我有一个UriMapper。由于我可以为我的一个页面创建多个参数,因此我希望有一种通配符或可变参数映射来避免创建所有参数组合。Silverlight - 有没有办法让'variadic'UriMapping?

这里是什么样子,只有三个参数,并且一些组合省略:

<sdk:Frame> 
    <sdk:Frame.UriMapper> 
     <sdk:UriMapper x:Name="uriMapper"> 
      <sdk:UriMapping Uri="List/query={query}/sort={sort}" MappedUri="/Views/ListPage.xaml?query={query}&amp;sort={sort}" /> 
      <sdk:UriMapping Uri="List/filter={filter}/sort={sort}" MappedUri="/Views/ListPage.xaml?filter={filter}&amp;sort={sort}" /> 
      <sdk:UriMapping Uri="List/filter={filter}/query={query}/sort={sort}" MappedUri="/Views/ListPage.xaml?filter={filter}&amp;query={query}&amp;sort={sort}" /> 
      <sdk:UriMapping Uri="List/sort={sort}" MappedUri="/Views/ListPage.xaml?sort={sort}" /> 
      <sdk:UriMapping Uri="{}{Page}" MappedUri="/Views/{Page}Page.xaml" /> 
     </sdk:UriMapper> 
    </sdk:Frame.UriMapper> 
</sdk:Frame> 

我想办法写的所有可能的参数到“列表”页面有一行,因为他们都遵循相同的规则。像(这不起作用):

<sdk:UriMapping Uri="List/{params}" MappedUri="/Views/ListPage.xaml?{params}" /> 

那么,有没有办法在Silverlight中做到这一点?

编辑:如果一切都失败了,我可能会后备代码生成映射,看起来会比几十条XAML线条更难看。

编辑2:或者只是忘记映射的URIs,只是传递实际的页面名称Navigate()。

回答

2

这就是Silverlight导航框架平坦的地方,也是我在生产应用中不使用它的一个重要原因。也就是说,在Silverlight 4中,您可以使用INavigationContentLoader以编程方式将所有不同的参数映射到其正确的视图,并创建更强大的自己的映射器类。另外请注意,这在Windows Phone 7中目前不可用(我看你做了很多iOS开发,所以想指出)。如果我没有记错的话,它应该在Windows Phone的Mango更新中提供,它应该在下个月对开发者和今年年底的消费者可用。

查阅这些链接,了解更多信息:

http://blogs.msdn.com/b/dphill/archive/tags/helix/

http://www.davidpoll.com/2009/11/30/opening-up-silverlight-4-navigation-introduction-to-inavigationcontentloader/

+0

谢谢,我会检查了这一点! – jv42 2011-05-16 08:40:15