WPF:与ListView的数据绑定获取错误:";在使用ItemsSource“之前,Items集合必须为空;
我正在尝试将ListView数据绑定设置为ObservableCollection。我还为列表视图中的每个项目添加了带有检查权限的上下文菜单。因此,我得到一个错误:“在使用ItemsSource之前,Items集合必须为空”。但是如果我在ListView中删除ItemsSource,我就不能使用数据绑定。 你能帮助我吗?您可以在以下位置下载示例:WPF:与ListView的数据绑定获取错误:";在使用ItemsSource“之前,Items集合必须为空;,wpf,data-binding,Wpf,Data Binding,我正在尝试将ListView数据绑定设置为ObservableCollection。我还为列表视图中的每个项目添加了带有检查权限的上下文菜单。因此,我得到一个错误:“在使用ItemsSource之前,Items集合必须为空”。但是如果我在ListView中删除ItemsSource,我就不能使用数据绑定。 你能帮助我吗?您可以在以下位置下载示例: 对于列表视图中的项,您只能有一个源,在这种情况下,您似乎在XAML中显式设置列表视图.items集合。这将导致您在尝试使用ItemsSource绑定时
对于
列表视图中的项,您只能有一个源,在这种情况下,您似乎在XAML中显式设置列表视图.items
集合。这将导致您在尝试使用ItemsSource绑定时看到的错误
可以尝试从XAML中删除ListView.Items
节点,并且只使用ItemsSource
绑定来填充列表
看起来您还需要使用ListView.ItemTemplate
来设置项目的格式,并正确设置上下文菜单。我在ItemContainerStyle中添加了上下文菜单,并取得了成功
<ListView Height="259" HorizontalAlignment="Left" Margin="12,26,0,0" Name="listView1" VerticalAlignment="Top" Width="479">
<ListView.Resources>
<ContextMenu x:Key="ItemContextMenu">
<MenuItem Header="Kiểm tra">
<MenuItem.Icon>
<Image Source="Images/CompareFiles.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Download" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter= {x:Static ObservableCollectionProblem:EnumUserAction.Download}}">
<MenuItem.Icon>
<Image Source="Images/SyncCurrentObject.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Upload" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter = {x:Static ObservableCollectionProblem:EnumUserAction.Upload}}">
<MenuItem.Icon>
<Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnListViewItem_PreviewMouseLeftButtonDown" />
<Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Name}" Header="Name"></GridViewColumn>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Actions, Converter={StaticResource ActionToStringConverter}}" Header="Action"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
你可以举个例子。我想设计两列,它看起来像ListView,每个项目都有上下文菜单。我可以在GridViewColumn.CellTemplate中设置上下文菜单,但我认为如果我有很多列,我会重复很多次,这很愚蠢。我不想为您编写它,有很多将数据模板与ListView一起使用的示例:或者这是真的,您可能可以使用CellTemplate获得您想要的。
<ListView Height="259" HorizontalAlignment="Left" Margin="12,26,0,0" Name="listView1" VerticalAlignment="Top" Width="479">
<ListView.Resources>
<ContextMenu x:Key="ItemContextMenu">
<MenuItem Header="Kiểm tra">
<MenuItem.Icon>
<Image Source="Images/CompareFiles.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Download" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter= {x:Static ObservableCollectionProblem:EnumUserAction.Download}}">
<MenuItem.Icon>
<Image Source="Images/SyncCurrentObject.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Upload" Visibility="{Binding Path=Actions, Converter={StaticResource MenuContext}, ConverterParameter = {x:Static ObservableCollectionProblem:EnumUserAction.Upload}}">
<MenuItem.Icon>
<Image Source="Images/upload.png" Style="{StaticResource ImageContextMenu}"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnListViewItem_PreviewMouseLeftButtonDown" />
<Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Name}" Header="Name"></GridViewColumn>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding Path=Actions, Converter={StaticResource ActionToStringConverter}}" Header="Action"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>