不了解如何实现WPF导航任务C#

不了解如何实现WPF导航任务C#,c#,wpf,C#,Wpf,我有一个评估任务,我不知道如何在代码中实现它。我想我需要一个if语句来决定我需要导航到页面的哪个实例,但不确定如何将Person对象传递到该实例,即使提示说我可以使用RoutedEventArgs访问它。有人能帮忙吗 到目前为止,我得到的是: public partial class Index : Page { private Repository _repo; public Index(Repository repo) {

我有一个评估任务,我不知道如何在代码中实现它。我想我需要一个
if
语句来决定我需要导航到页面的哪个实例,但不确定如何将
Person
对象传递到该实例,即使提示说我可以使用RoutedEventArgs访问它。有人能帮忙吗

到目前为止,我得到的是:

 public partial class Index : Page
    {
        private Repository _repo;
        public Index(Repository repo)
        {
            _repo = repo;
            InitializeComponent();

            //TODO: (Task 6A) 
            //assign the collection of People objects return from the repository
            //as the data source for the DataGrid (dgPeople)

            var source = _repo.GetPeople();
            dgPeople.ItemsSource = source;

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

            //TODO: (Task 6B) 
            //add the required logic for instantiating and navigating to a new instance of the Edit or Delete view.
            //Be sure to pass in the selected Person object and repository as arguments for the constructor.
            //TIP: the related Person instance can be accessed via the RoutedEventArgs 

            //edit or delete
            string action = (sender as Button).Content.ToString();
            Person p = new Person();

            Delete delete = new Delete(_repo, p);
            Update edit = new Update(_repo, p);

        }    
    }

好吧,我猜了很多,因为我看不出你的视图是如何设置的

您有一个名为
dgpeels
DataGrid
。这只是一个显示事物集合的通用控件

您可以将
dgPeople
ItemsSource
设置为您的人员集合。因此,您的
DataGrid
现在显示了一组人员对象

WPF中的每个视图项都有一个
DataContext
。这是视图项基于/查看的数据。DataGrid中的每一行对应一个人,因此该行中的所有内容都将自动将其DataContext设置为此人


您可以使用属性访问任何视图元素的DataContext,因此可以通过触发事件的按钮访问它。

好的,我猜这是因为我看不到视图是如何设置的

您有一个名为
dgpeels
DataGrid
。这只是一个显示事物集合的通用控件

您可以将
dgPeople
ItemsSource
设置为您的人员集合。因此,您的
DataGrid
现在显示了一组人员对象

WPF中的每个视图项都有一个
DataContext
。这是视图项基于/查看的数据。DataGrid中的每一行对应一个人,因此该行中的所有内容都将自动将其DataContext设置为此人


您可以使用属性访问任何视图元素的DataContext,因此可以通过触发事件的按钮访问它。

您不应该在事件处理程序
按钮中创建新的
Person
实例。否则,单击的
人员
和编辑/删除的实例将不同,更改不会反映在GUI中。
按照非常清晰的指导说明,您必须访问事件处理程序的事件参数
e
,以获取事件的源(人员
):

或者:

var clickedPerson = e.Source as Person; 
是否使用
e.OriginalSource
e.Source
取决于视图的设置方式。您必须同时尝试这两个属性,或者使用调试器查看这两个属性的实际值

现在您有了正确的
Person
实例,您必须检查要加载的视图。从您发布的上下文来看,不可能知道确切的情况。但是是的,
if
可以测试这个条件并相应地进行分支

还不清楚您的页面系统是如何设置的,例如,您是否正在使用
Frame
?在这种情况下,您必须使用
页面。NavigationService
才能加载新视图:

this.NavigationService.Navigate(edit);

搜索并了解有关框架和特定类及其属性的更多信息总是很有用的,建议这样做。例如,要了解
DataContext
visit

您不应该在事件处理程序
按钮中创建新的
Person
实例。否则,单击的
人员
和编辑/删除的实例将不同,更改不会反映在GUI中。
按照非常清晰的指导说明,您必须访问事件处理程序的事件参数
e
,以获取事件的源(人员
):

或者:

var clickedPerson = e.Source as Person; 
是否使用
e.OriginalSource
e.Source
取决于视图的设置方式。您必须同时尝试这两个属性,或者使用调试器查看这两个属性的实际值

现在您有了正确的
Person
实例,您必须检查要加载的视图。从您发布的上下文来看,不可能知道确切的情况。但是是的,
if
可以测试这个条件并相应地进行分支

还不清楚您的页面系统是如何设置的,例如,您是否正在使用
Frame
?在这种情况下,您必须使用
页面。NavigationService
才能加载新视图:

this.NavigationService.Navigate(edit);

搜索并了解有关框架和特定类及其属性的更多信息总是很有用的,建议这样做。例如,要了解
DataContext
visit

我猜此人将是触发事件的按钮的DataContext。我有一个Person类,然后是一个由Person填充的存储库类。老实说,我不太明白这是怎么回事。datacontext和ItemSource之间有什么区别?谁给你分配了任务?为什么不问问他呢?我每周只有一节课,是谁给我布置的作业,我正试图得到帮助来理解这一点。谢谢你的问题@sinatrI我猜此人将是触发事件的按钮的DataContext。我有一个Person类,然后是一个由Person填充的存储库类。老实说,我不太明白这是怎么回事。datacontext和ItemSource之间有什么区别?谁给你分配了任务?为什么不问问他呢?我每周只有一节课,是谁给我布置的作业,我正试图得到帮助来理解这一点。谢谢你的问题@sinatr,这实际上很有意义@gazeddestroyer。它为我清除了datacontext部分。现在我需要了解如何做休息,这实际上非常有意义@GazTheDestroyer。它为我清除了datacontext部分。现在我需要了解如何做REST谢谢你的帮助,这清理了一个