不了解如何实现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谢谢你的帮助,这清理了一个