繁体   English   中英

Listbox 的 ItemSource 不会在项目更改时更新

[英]ItemSource of Listbox is not updated on item change

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

带有列表框的用户控件:

 <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 中的 ListBoxes 控件:

 <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 选择显示一种格式。 如果我正在运行应用程序 select 图像,则不会发生任何事情,但是如果我在列表视图中更改文本块的绑定值并将其切换回“项目名称”,则会显示图像和名称。

  • 您是否将 DataContext 设置为特定的 ViewModel?
  • ObservableCollection 只能确保对可以更新到 UI 的项目进行添加/删除操作。 如果您希望 item 属性通知 UI,您应该重写该属性的 setter 并实现 IPropertyChangedNotify。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM