【问题标题】:How do I do binding in a Visual Studio extension a Stackpanel?如何在 Visual Studio 扩展中绑定 Stackpanel?
【发布时间】:2018-01-20 06:37:49
【问题描述】:

我正在编写一个 Visual Studio 扩展,这似乎不相关,但也许是。调用 initializeComponent 时,我的代码在代码隐藏中引发异常。我有一个 TeamExplorerSection,它创建一个“模型”并将其传递给构造函数中的 SectionView(xaml)。它被存储为视图的属性。该模型具有一些属性,名称、ID 等。我能够将这些属性绑定到视图,但它也有一个集合,我试图将其绑定到位于堆栈面板中的 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 H结果=0x80131501 Message='向'System.Windows.Controls.ItemCollection' 类型的集合添加值引发异常。'行号“22”和行位置“19”。 来源=PresentationFramework 堆栈跟踪: 在 System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader,IXamlObjectWriterFactory writerFactory,布尔型 skipJournaledProperties,对象 rootObject,XamlObjectWriterSettings 设置,Uri baseUri) 在 System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader,布尔 skipJournaledProperties,对象 rootObject,XamlAccessLevel accessLevel,Uri baseUri) 在 System.Windows.Markup.XamlReader.LoadBaml(流流,ParserContext parserContext,对象父,布尔 closeStream) 在 System.Windows.Application.LoadComponent(对象组件,Uri 资源定位器) 在 C:\Dev\ReviewPlus\ReviewPlus\CodePlusTeamExplorerSectionView.xaml:line 1 中的 ReviewPlus.TeamExplorerSectionView.InitializeComponent() 内部异常1: InvalidOperationException:使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素。

我似乎对这个绑定做错了什么。

【问题讨论】:

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


    【解决方案1】:

    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>
    

    不同之处在于DataTemplateItemTemplatesetter 内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 2021-12-17
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多