Skip to main content
 首页 » 编程设计

c#之在使用 ItemsSource 之前,项目集合必须为空

2024年01月18日29leader

如果我将 DataTrigger 放在一个简单的列表框中,我会得到这个运行时异常:

Items collection must be empty before using ItemsSource



我的没有数据触发器的列表框(也不异常(exception)):
<ListBox ItemsSource="{Binding EdgedBoards}" SelectedItem="{Binding SelEdgedBoard, Mode=TwoWay}" DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
        <Style TargetType="{x:Type ListBoxItem}"  
               BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
 
            <Setter Property="IsSelected" 
                    Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

我的列表框与 DataTrigger :
<ListBox ItemsSource="{Binding EdgedBoards}" SelectedItem="{Binding SelEdgedBoard, Mode=TwoWay}" DisplayMemberPath="Name"> 
    <Style TargetType="{x:Type ListBox}" BasedOn="{StaticResource {x:Type ListBox}}"> 
        <Setter Property="Focusable" Value="True" /> 
 
        <Style.Triggers> 
            <DataTrigger Binding="{Binding ElementName=EdgedBoardsAdd_UC, Path=Visibility}" Value="Visible"> 
                <Setter Property="Focusable" Value="False" /> 
            </DataTrigger> 
        </Style.Triggers> 
    </Style> 
 
    <ListBox.ItemContainerStyle> 
        <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

后面的代码有什么问题?

请您参考如下方法:

您没有正确声明样式,因此它被设置为列表框的内容 - 您正在手动声明一个包含单个样式的列表。

你应该包装你现有的Style带有 <ListBox.Style> 的元素元素来解决这个问题。