如何在Visual Studio扩展中对Stackpanel进行绑定?

时间:2017-08-11 17:04:28

标签: wpf xaml visual-studio-2017 xaml-binding

我正在编写一个Visual Studio扩展,它似乎并不相关,但也许它是。我的代码在调用initializeComponent时在代码隐藏中抛出异常。我有一个TeamExplorerSection,可以创建一个"模型"并将其传递给构造函数中的SectionView(xaml)。它存储为视图的属性。该模型有一些属性,Name,Id等。我能够将这些属性绑定到视图,但它也有一个集合,我试图绑定到位于stackpanel中的ItemsControl。这不起作用。

<UserControl x:Class="ReviewPlus.ReviewPlusTeamExplorerSectionView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:ReviewPlus.ViewModels="clr-namespace:ReviewPlus.ViewModels"
         mc:Ignorable="d" 
         d:DesignHeight="250" d:DesignWidth="300">
<UserControl.DataContext>
    <ReviewPlus.ViewModels:RelatedReviewsViewModel/>
</UserControl.DataContext>    
<StackPanel>
    <ItemsControl Name="RelatedReviewsICtl" ItemsSource="{Binding RelatedReviews}">
        <DataTemplate>
            <StackPanel  Orientation="Horizontal" HorizontalAlignment="Left">                 
                <TextBlock Text="{Binding Path=Name}" />
                <TextBlock Text="{Binding Path=PreviousId}"/>
                <TextBlock Text="{Binding Path=Id}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl>    
</StackPanel>

以下是例外:

  

发生了System.Windows.Markup.XamlParseException     的HResult = 0x80131501     消息=&#39;为类型&System;系统。抛出异常。&#39;行号&#39; 22&#39;和行位置&#39; 19&#39;     来源= PresentationFramework     堆栈跟踪:      在System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader,IXamlObjectWriterFactory writerFactory,Boolean skipJournaledProperties,Object rootObject,XamlObjectWriterSettings settings,Uri baseUri)      在System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader,Boolean skipJournaledProperties,Object rootObject,XamlAccessLevel accessLevel,Uri baseUri)      在System.Windows.Markup.XamlReader.LoadBaml(Stream stream,ParserContext parserContext,Object parent,Boolean closeStream)      在System.Windows.Application.LoadComponent(对象组件,Uri resourceLocator)      在C:\ Dev \ ReviewPlus \ ReviewPlus \ CodePlusTeamExplorerSectionView.xaml中的ReviewPlus.TeamExplorerSectionView.InitializeComponent():第1行   内部例外1:   InvalidOperationException:当ItemsSource正在使用时,操作无效。使用ItemsControl.ItemsSource访问和修改元素。

我似乎对这种绑定做错了。

1 个答案:

答案 0 :(得分:0)

XAML正在添加DataTemplate作为项目,因此错误。您需要指定它是ItemTemplate。试试这个。

<ItemsControl Name="RelatedReviewsICtl" ItemsSource="{Binding RelatedReviews}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel  Orientation="Horizontal" HorizontalAlignment="Left">                 
                <TextBlock Text="{Binding Path=Name}" />
                <TextBlock Text="{Binding Path=PreviousId}"/>
                <TextBlock Text="{Binding Path=Id}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

区别在于DataTemplate位于ItemTemplate制定者中。