列表框的 ItemSource 不会在项目更改时更新

ItemSource of Listbox is not updated on item change

在我的 WPF 应用程序中,我有一个包含项目集合的 ListBox。单击按钮并在打开的对话框中 selected 时可以添加一项。一旦 select 编辑了一个项目,对话框就会关闭,并且该项目的图像和名称应该会显示在我的列表框中。不幸的是,列表框没有更新,没有任何变化。

带列表框的用户控件:

<ListBox ItemsSource="{Binding BlButtonCollection, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Stretch" SelectedItem="{Binding SelectedSticker}"
                     HorizontalContentAlignment="Stretch" ItemContainerStyle="{StaticResource ListBoxItemStyle}">
                <ListBox.Resources>
                    <viewmodels1:BindingProxy x:Key="ProxyElement" Data="{Binding}" />
                </ListBox.Resources>
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid Columns="4" Rows="10"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border BorderBrush="Black" BorderThickness="1">
                            <Grid x:Name="f">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="5*"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <Button x:Name="btnSelectArticle" Background="Transparent" Grid.RowSpan="2" BorderThickness="0" 
                                        Command="{Binding DataContext.ButtonClicked,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"/>
                                <Image Height="1.5cm" HorizontalAlignment="Center" Source="{Binding ItemImage.ImageUrl, Converter={StaticResource ImageFormatConverter}}"/>
                                <TextBlock Text="{Binding ItemName}" Width="4cm" Height="0.8cm" TextWrapping="Wrap" Grid.Row="1" HorizontalAlignment="Center"/>
                            </Grid>
                        </Border>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

主列表框控件 window:

<formats:OneXTwo x:Name="oneXTwo" BlButtonCollection="{Binding BlButtons_2}" IsBlVisible="Visible" Visibility="{Binding Are2StickersVisible}" 
                                 ButtonClicked="{Binding BlStickerButtonClickedCommand}"/>
                <formats:ThreeXEight x:Name="threeXEight" BlButtonCollection="{Binding BlButtons_24}" IsBlVisible="Visible" Visibility="{Binding Are24StickersVisible}" 
                                     ButtonClicked="{Binding BlStickerButtonClickedCommand}"/>
                <formats:FourXTen x:Name="fourXTen" BlButtonCollection="{Binding BlButtons_40, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" IsBlVisible="Visible" Visibility="{Binding Are40StickersVisible}" 
                                  ButtonClicked="{Binding BlStickerButtonClickedCommand}" SelectedSticker="{Binding SelectedBlSticker, Mode=TwoWay}" />

我应该提一下,我有三种不同的格式,每种格式都是自己的用户控件。因此,它们显示在 shell 视图中,并基于 ComboBox selection 显示一种格式。如果我是 运行 应用程序,select 图像没有任何反应,但是如果我在列表视图中更改文本块的绑定值并将其切换回 'Itemname' 图像和名称是显示。

  • 您是否将 DataContext 设置为特定的 ViewModel?
  • ObservableCollection 只能确保对可更新到UI 项的add/remove 操作。如果你想让项目 属性 通知 UI,你应该覆盖 属性 的 setter 并实现 IPropertyChangedNotify。