WPF列表框:绑定到ObservableCollection
我正在运行时将我的列表框绑定到ObservableCollection。单击按钮后,我的集合中的一个项会被修改,但相应的ListBox项不会相应地更新自身。我已经阅读了几篇类似的SO文章和其他帮助材料,看起来我正在做他们要求的一切,但运气不佳。所有内容似乎都正确加载和绑定,但当我更改集合中某个项的“IsLoading”属性时,绑定到IsLoading属性的网格(请参见下面的DataTemplate)的可见性不会更改 以下是我的列表框XAML:WPF列表框:绑定到ObservableCollection,wpf,binding,listbox,observablecollection,Wpf,Binding,Listbox,Observablecollection,我正在运行时将我的列表框绑定到ObservableCollection。单击按钮后,我的集合中的一个项会被修改,但相应的ListBox项不会相应地更新自身。我已经阅读了几篇类似的SO文章和其他帮助材料,看起来我正在做他们要求的一切,但运气不佳。所有内容似乎都正确加载和绑定,但当我更改集合中某个项的“IsLoading”属性时,绑定到IsLoading属性的网格(请参见下面的DataTemplate)的可见性不会更改 以下是我的列表框XAML: <ListBox Name="
<ListBox Name="lstItems">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Name="ListBoxGrid">
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsSelected}" />
<Image Grid.Column="1" Width="50" Stretch="Uniform" Source="{Binding Image}" />
<TextBlock Grid.Column="2" Text="{Binding Path=ImageFilePath}" />
<Grid Grid.Column="3" Visibility="{Binding IsLoading, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=TwoWay, BindsDirectlyToSource=True, Converter={StaticResource BooleanToVisibilityConverter1}}">
<my:LoadingAnimation x:Name="SendAnimation" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这就是我创建集合并绑定它的方式:
ObservableCollection<Order> mOrders = new ObservableCollection<Order>();
public MainWindow()
{
InitializeComponent();
lstItems.ItemsSource = mOrders;
}
observetecollection mOrders=新的observetecollection();
公共主窗口()
{
初始化组件();
lstItems.ItemsSource=mOrders;
}
别客气。有时候,你花了几个小时去挖掘问题,最终感到沮丧,把它贴在上面,然后在接下来的2分钟里,你自己去解决它。对于任何未来的读者来说,唯一的问题是我在PropertyChanged
事件中发送null
。当我将其更改为this
时,一切都开始运转起来了。如果您将BindsDirectlyToSource=False怎么办?@Klaus78:谢谢Klaus。见下面我的答案。我还发现其他绑定属性都不是必需的。因此,您可以像Visibility=“{Binding IsSending,Converter={StaticResource BooleanToVisibilityConverter1}}”一样使用它。
ObservableCollection<Order> mOrders = new ObservableCollection<Order>();
public MainWindow()
{
InitializeComponent();
lstItems.ItemsSource = mOrders;
}