我的数据绑定似乎是显示项目,但它导致输出日志中的绑定错误,所以它似乎是错误的。我在这里以Microsoft示例为基础:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh758322.aspx
我将集合视图作为页面资源,初始集合,GroupCV绑定了页面的DataContext(视图模型)的Groups属性,似乎没有给出任何错误。
<Page.Resources>
<!-- Collection of items displayed by this page -->
<CollectionViewSource
x:Name="GroupsCV"
Source="{Binding Groups}"/>
<CollectionViewSource
x:Name="TypesCV"
Source="{Binding Types, Source={StaticResource GroupsCV}}" />
<CollectionViewSource
x:Name="ProductsCV"
Source="{Binding Products, Source={StaticResource TypesCV}}" />
</Page.Resources>
以下是我绑定的UI项目。就像我说的那样,一切似乎都在工作中,每个列中都显示了项目,然后在它们之间点击会更新相应的列。
<Grid x:Name="PopupChildInner"
Margin="20"
>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*" />
<ColumnDefinition Width="0.3*" />
<ColumnDefinition Width="0.3*" />
</Grid.ColumnDefinitions>
<!-- All Groups -->
<StackPanel Margin="5" Grid.Column="0">
<TextBlock Text="Product Categories"/>
<ListBox ItemsSource="{Binding Source={StaticResource GroupsCV}}"
DisplayMemberPath="Title"/>
</StackPanel>
<!-- All Types -->
<StackPanel Margin="5" Grid.Column="1">
<TextBlock Text="{Binding Title, Source={StaticResource GroupsCV}}"/>
<ListBox ItemsSource="{Binding Source={StaticResource TypesCV}}"
DisplayMemberPath="name"/>
</StackPanel>
<!-- Items -->
<Grid Margin="5" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding name, Source={StaticResource TypesCV}}"/>
<ListBox x:Name="PopupProductList"
ItemsSource="{Binding Source={StaticResource ProductsCV}}"
SelectionMode="Multiple"
Grid.Row="1"
>
<ListBox.ItemTemplate>
<DataTemplate>
<!-- Product item -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding name}" />
<!--List of PDF items-->
<ListBox x:Name="PopupProductPDFList"
Grid.Row="1"
DisplayMemberPath="Name"
ItemsSource="{Binding PDFItems}">
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
但是,我收到了这些错误:
错误:BindingExpression路径错误:&#39;类型&#39;未在&#39; Windows.UI.Xaml.Data.ICollectionView&#39;上找到的属性。 BindingExpression:Path =&#39; Types&#39;的DataItem =&#39; Windows.UI.Xaml.Data.ICollectionView&#39 ;;目标元素是&#39; Windows.UI.Xaml.Data.CollectionViewSource&#39; (名称=&#39;空&#39);目标财产是来源&#39; (键入&#39;对象&#39;) 错误:BindingExpression路径错误:&#39;产品&#39;未在&#39; Windows.UI.Xaml.Data.ICollectionView&#39;上找到的属性。 BindingExpression:Path =&#39; Products&#39;的DataItem =&#39; Windows.UI.Xaml.Data.ICollectionView&#39 ;;目标元素是&#39; Windows.UI.Xaml.Data.CollectionViewSource&#39; (名称=&#39;空&#39);目标财产是来源&#39; (键入&#39;对象&#39;) 错误:BindingExpression路径错误:&#39; name&#39;未在&#39; Windows.UI.Xaml.Data.ICollectionView&#39;上找到的属性。 BindingExpression:Path =&#39; name&#39;的DataItem =&#39; Windows.UI.Xaml.Data.ICollectionView&#39 ;;目标元素是&#39; Windows.UI.Xaml.Controls.TextBlock&#39; (名称=&#39;空&#39);目标属性是&#39; Text&#39; (键入&#39; String&#39;) 错误:BindingExpression路径错误:&#39;标题&#39;未在&#39; Windows.UI.Xaml.Data.ICollectionView&#39;上找到的属性。 BindingExpression:Path =&#39; Title&#39;的DataItem =&#39; Windows.UI.Xaml.Data.ICollectionView&#39 ;;目标元素是&#39; Windows.UI.Xaml.Controls.TextBlock&#39; (名称=&#39;空&#39);目标属性是&#39; Text&#39; (键入&#39; String&#39;)
任何人都可以向我解释我在这里做错了什么吗?我知道它似乎在寻找集合视图中的属性,但是MS样本是如何工作的,以及为什么一切都在工作&#34;在大多数情况下?我可能会遗漏一些基本的东西......
答案 0 :(得分:1)
我能够重现&#34;错误&#34;按照提供的网站上的确切教程。众所周知,在处理XAML时,您可能会遇到不合理的错误,实际上并非真正的错误。它可能是VS中的一个错误,它可能是正在加载的控件/资源的顺序等等。简而言之,如果一切按预期方式运行,并且您看到绑定错误,请不要担心。事实上,用鼠标/键盘测试UI,如果UI看起来坏了,那么会看输出窗口。
我确实尝试了一些事情,看看我是否可以彻底摆脱错误,但这并没有及时发生。简而言之,我要说避免使用XAML创建静态数据,并确保您使用MVVM方法并实现INotifyPropertyChanged
。我这样说是因为你只是试图绑定到StaticResource
成员的项目的错误;当然我认为您的静态数据应该在ViewModel或Model域中生成。
在您关联的示例中,我可以通过以这种方式更改ContentControl
来删除一些错误:
<ContentControl Content="{Binding Source={StaticResource Teams}}">
<ContentControl.Template>
<ControlTemplate>
<StackPanel Margin="5">
<TextBlock Text="{Binding Name}"
FontSize="15"
FontWeight="Bold" />
<StackPanel Orientation="Horizontal"
Margin="10,10">
<TextBlock Text="Wins:"
Margin="0,0,5,0" />
<TextBlock Text="{Binding Wins}" />
</StackPanel>
<StackPanel Orientation="Horizontal"
Margin="10,0">
<TextBlock Text="Losses:"
Margin="0,0,5,0" />
<TextBlock Text="{Binding Losses}" />
</StackPanel>
</StackPanel>
</ControlTemplate>
</ContentControl.Template>
TL; DR:你没有做错任何事。微软的例子没有&#34;工作&#34;无论是。
答案 1 :(得分:0)
您要绑定的Types
中没有Products
或CollectionViewSource
个属性。