我正在编写一个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访问和修改元素。
我似乎对这种绑定做错了。
答案 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
制定者中。