Навигация между страницами Silverlight с помощью MVVM - PullRequest
1 голос
/ 03 апреля 2012

Я создаю простое приложение на Silverlight 4. В папке View у меня есть 2 (Silverlight Pages), также в ViewModel у меня есть 2 ViewModels. В проекте Silverligh у меня есть UserControl, который содержит одну из страниц. Мне нужен простой пример использования навигации. Например, я нажимаю кнопку, вызываю какой-то метод во ViewModel, и этот метод перенаправляет меня на другую страницу Silverligh. Помогите мне, я страдаю 3 дня, и я нашел только очень трудные примеры, но я просто верю в простоту.

<UserControl x:Class="WebServerApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
             xmlns:pagescol="clr-namespace:SilverlightServerLib.View;assembly=SilverlightServerLib"

    Width="Auto" Height="Auto">

    <Grid x:Name="LayoutRoot" Background="White">
        <pagescol:SettingsPage/>
    </Grid>
</UserControl>

Это был UserControll, который содержит первую страницу, мне нужно перейти на другую страницу. Большое спасибо!

1 Ответ

2 голосов
/ 03 апреля 2012

Вы должны использовать элемент управления Frame из Navigation Framework (Silverlight Takeit).тогда вы можете попробовать такой подход

<Button Content="Click">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <i:EventTrigger.Actions>
                <actions:NavigateAction UriPath="/Home" TargetName="MainFrame" />
            </i:EventTrigger.Actions>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

<navigation:Frame x:Name="MainFrame"                          
                  UriMapper="{StaticResource UriMapper}" />

и соответствующий код для NavigateAction:

public class NavigateAction : TargetedTriggerAction<Frame>
{
    public static readonly DependencyProperty UriPathProperty =
        DependencyProperty.Register("UriPath", typeof(string), typeof(NavigateAction), null);

    public string UriPath
    {
        get { return (string)GetValue(UriPathProperty); }
        set { SetValue(UriPathProperty, value); }
    }

    protected override void Invoke(object parameter)
    {
        Target.Navigate(new Uri(UriPath, UriKind.RelativeOrAbsolute));
    }
}

Кроме того, вы всегда должны использовать UriMapper.Это хорошая практика:

<Application.Resources>
    <sdk:UriMapper x:Key="UriMapper">
        <sdk:UriMapping MappedUri="/Views/TasksView.xaml" Uri="" />
        <sdk:UriMapping MappedUri="/Views/{view}View.xaml" Uri="/{view}" />
    </sdk:UriMapper>
</Application.Resources>
...