我正在撰写一个视觉工作室扩展程序,其中包含有关代码审查页面的部分。我想访问有关代码审查页面其余部分的信息,特别是正在显示的页面上当前的代码审查。我应该能够访问workitemId,但到目前为止我还没弄明白。
修改 使用Cole的建议我已经访问了PageContent,但我不知道我应该将内容转换为什么类型。我也不知道它什么时候可用。我想在初始化我的部分时以及之后访问它们。当我尝试初始化该部分时,这是我的代码:
public override object SectionContent
{
get
{
if (base.SectionContent == null)
{
var teamExplorerPage = this.GetService<ITeamExplorerPage>();
var pageContent = teamExplorerPage.PageContent;
this.model.CodeReviewId = pageContent;
base.SectionContent = new CodePlusTeamExplorerSectionView(this.ServiceProvider, this.model);
}
return base.SectionContent;
}
}
当我调试代码时,我看到PageContent上有一个DataContext,但我不知道将pageContent(orITeamExplorerPage)转换为什么类型,以获取对它的访问权限。此外,DataContext有一个CodeReviewId属性,它看起来像我需要的值,但在生命周期的这一点上它是null。如果我想基于CodeReviewId检索一些额外的数据何时/何时可用?
答案 0 :(得分:0)
我仍在尝试弄清楚如何在页面的生命周期中更早地获取它,但是从页面中的按钮单击等事件我可以使用反射检索值。这看起来有点像黑客,也许其他人有更好的方法,但现在就是。
private void Button_Click(object sender, RoutedEventArgs e)
{
var teamExplorer = this.GetService<ITeamExplorer>();
var currentPage = teamExplorer.CurrentPage;
var currentContent = currentPage.PageContent;
Type type = currentContent.GetType();
PropertyInfo pi = type.GetProperty("DataContext");
var dataContext = pi.GetValue(currentContent);
Type contextTypetype = dataContext.GetType();
PropertyInfo contextTypePi = contextTypetype.GetProperty("CodeReviewId");
var codeReviewId = contextTypePi.GetValue(dataContext);
var context = new Dictionary<string, object>();
context.Add("WorkItemId", codeReviewId);
teamExplorer.NavigateToPage(new Guid(TeamExplorerPageIds.ViewCodeReview), context);
}