Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在现代UI WPF应用程序中导航到带参数的页面_C#_Wpf_Modern Ui - Fatal编程技术网

C# 在现代UI WPF应用程序中导航到带参数的页面

C# 在现代UI WPF应用程序中导航到带参数的页面,c#,wpf,modern-ui,C#,Wpf,Modern Ui,如何在WPF应用程序中使用OnFragmentedNavigation导航到页面? 我想从用户那里获取一个参数,并导航到基于该参数创建的页面。这里有一个简单的例子: 假设您希望在用户提供特定输入时导航到员工配置文件页面。 为了简单起见,这里有一个简单的页面视图,它只有一个员工ID为“1”的文本框: } 将员工页面定义为: public partial class EmployeePage : UserControl { public EmployeePage()

如何在WPF应用程序中使用OnFragmentedNavigation导航到页面? 我想从用户那里获取一个参数,并导航到基于该参数创建的页面。这里有一个简单的例子:


假设您希望在用户提供特定输入时导航到员工配置文件页面。

为了简单起见,这里有一个简单的页面视图,它只有一个员工ID为“1”的文本框:

}

将员工页面定义为:

    public partial class EmployeePage : UserControl
    {
     public EmployeePage() { }

     public EmployeePage(int id)
     {
        InitializeComponent();
     }
    }
我的问题是-如何正确触发OnFragmentNavigation方法并在执行ID时导航到新页面

运行此示例时,按钮单击的最后一行隐式调用“OnNavigatingFrom”和“OnNavigatedFrom”方法,但从不调用“OnFragmentNavigation”,即使导航链接包含此处指定的片段字符:


如果您无法使用OnFragmentNavigation完成此任务,那么在MUI框架下如何执行此导航?

我有一个示例可以执行此操作。启动它,检查与网格控件关联的事件。

我有一个示例可以这样做。启动它,检查与网格控件关联的事件。

EmployePage必须实现IContent接口。在这里,您将了解碎片导航

 public partial class TestPage : UserControl, IContent
 {
    public TestPage()
    {
        InitializeComponent();
    }

    public void OnFragmentNavigation(FragmentNavigationEventArgs e)
    {
        int param = Int32.Parse(e.Fragment);
        EmployeePage page = new EmployeePage(param);
        //when method is triggered, should execute creation of new Employee Page based off parameter
    }

    public void OnNavigatedFrom(NavigationEventArgs e)
    {
        //throw new NotImplementedException();
    }

    public void OnNavigatedTo(NavigationEventArgs e)
    {
        //throw new NotImplementedException();
    }

    public void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
       //throw new NotImplementedException();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
         int idParam = Int32.Parse(Test.text);
         NavigationCommands.GoToPage.Execute("/EmployeePage.xaml#" + idParam, this);
        //parses the text and navigates to an Employee Page, fragmenting the ID
    }
}
OnNavigatedFrom
OnNavigatingFrom
在您导航的页面中被调用

OnNavigatedTo
OnFragmentNavigation
在您导航到的页面中被调用


参数化构造函数永远不会被调用,但我想调用。

EmployePage必须实现IContent接口。在这里,您将了解碎片导航

 public partial class TestPage : UserControl, IContent
 {
    public TestPage()
    {
        InitializeComponent();
    }

    public void OnFragmentNavigation(FragmentNavigationEventArgs e)
    {
        int param = Int32.Parse(e.Fragment);
        EmployeePage page = new EmployeePage(param);
        //when method is triggered, should execute creation of new Employee Page based off parameter
    }

    public void OnNavigatedFrom(NavigationEventArgs e)
    {
        //throw new NotImplementedException();
    }

    public void OnNavigatedTo(NavigationEventArgs e)
    {
        //throw new NotImplementedException();
    }

    public void OnNavigatingFrom(NavigatingCancelEventArgs e)
    {
       //throw new NotImplementedException();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
         int idParam = Int32.Parse(Test.text);
         NavigationCommands.GoToPage.Execute("/EmployeePage.xaml#" + idParam, this);
        //parses the text and navigates to an Employee Page, fragmenting the ID
    }
}
OnNavigatedFrom
OnNavigatingFrom
在您导航的页面中被调用

OnNavigatedTo
OnFragmentNavigation
在您导航到的页面中被调用

参数化构造函数永远不会被调用,但我想调用。

它类似于PRISM
在导航命令(或服务)中,您需要创建导航参数,然后通过\u regionManager.RequestNavigate(regionName、uri、NavigationParameters)

public void NavigationCommandExecute()
{    
        var parameters = new NavigationParameters(); 
            parameters.Add("ID", employee.Id); 
            parameters.Add("myObjectParameter", new ObjectParameter());
            regionManager.RequestNavigate(RegionNames.TabRegion, new Uri("EmployeeDetailsView", UriKind.Relative), parameters);  
}
必须实现INavigationAware的内部视图,您可以检索 导航参数来自导航目标

public void OnNavigatedTo(NavigationContext navigationContext)
{
    string id = navigationContext.Parameters["ID"];
    ObjectParameter myParameter =navigationContext.Parameters["myObjectParameter"];
}
它类似于棱镜
在导航命令(或服务)中,您需要创建导航参数,然后通过\u regionManager.RequestNavigate(regionName、uri、NavigationParameters)

public void NavigationCommandExecute()
{    
        var parameters = new NavigationParameters(); 
            parameters.Add("ID", employee.Id); 
            parameters.Add("myObjectParameter", new ObjectParameter());
            regionManager.RequestNavigate(RegionNames.TabRegion, new Uri("EmployeeDetailsView", UriKind.Relative), parameters);  
}
必须实现INavigationAware的内部视图,您可以检索 导航参数来自导航目标

public void OnNavigatedTo(NavigationContext navigationContext)
{
    string id = navigationContext.Parameters["ID"];
    ObjectParameter myParameter =navigationContext.Parameters["myObjectParameter"];
}

很抱歉你的编辑足以让我知道你在做一些与你最初发帖时完全不同的事情,但是仍然没有足够的上下文让我真正理解这个问题。也许会有其他人捡起它。为什么没有足够的上下文?你还需要什么?一个真正的开始会是一个好的开始。但是,您似乎正在使用某种第三方库,因此您的问题可能涉及特定于其库的某些问题。我不熟悉该库,因此即使您改进了该问题,也不能保证我能够提供解决方案(即有足够的时间熟悉第三方库以理解和回答该问题)。你最好找一个已经了解图书馆的人。这绝对是一个MCVE。我提供了一个非常详细的示例,它仍然用注释和每个文件的描述说明了我的整个问题。第二点-第三方的名称(“现代UI”或“MUI”)始终在问题标题、问题标签和整个问题中都有说明。请阅读文章。也要阅读,尤其是在该页底部链接的文章。你对实际MCVE的理解是有缺陷的。对不起。你的编辑足以让我知道你在做一些与你最初发帖时完全不同的事情,但是仍然没有足够的上下文让我真正理解这个问题。也许会有其他人捡起它。为什么没有足够的上下文?你还需要什么?一个真正的开始会是一个好的开始。但是,您似乎正在使用某种第三方库,因此您的问题可能涉及特定于其库的某些问题。我不熟悉该库,因此即使您改进了该问题,也不能保证我能够提供解决方案(即有足够的时间熟悉第三方库以理解和回答该问题)。你最好找一个已经了解图书馆的人。这绝对是一个MCVE。我提供了一个非常详细的示例,它仍然用注释和每个文件的描述说明了我的整个问题。第二点-第三方的名称(“现代UI”或“MUI”)始终在问题标题、问题标签和整个问题中都有说明。请阅读文章。也要阅读,尤其是在该页底部链接的文章。你对实际MCVE的理解是有缺陷的。