如何在代码审核页面的自定义部分中获取代码审核ID?

时间:2017-08-15 20:16:09

标签: visual-studio-2017 visual-studio-extensions

我正在撰写一个视觉工作室扩展程序,其中包含有关代码审查页面的部分。我想访问有关代码审查页面其余部分的信息,特别是正在显示的页面上当前的代码审查。我应该能够访问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检索一些额外的数据何时/何时可用?

1 个答案:

答案 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);
    }