WPF列表框:绑定到ObservableCollection

WPF列表框:绑定到ObservableCollection,wpf,binding,listbox,observablecollection,Wpf,Binding,Listbox,Observablecollection,我正在运行时将我的列表框绑定到ObservableCollection。单击按钮后,我的集合中的一个项会被修改,但相应的ListBox项不会相应地更新自身。我已经阅读了几篇类似的SO文章和其他帮助材料,看起来我正在做他们要求的一切,但运气不佳。所有内容似乎都正确加载和绑定,但当我更改集合中某个项的“IsLoading”属性时,绑定到IsLoading属性的网格(请参见下面的DataTemplate)的可见性不会更改 以下是我的列表框XAML: <ListBox Name="

我正在运行时将我的列表框绑定到ObservableCollection。单击按钮后,我的集合中的一个项会被修改,但相应的ListBox项不会相应地更新自身。我已经阅读了几篇类似的SO文章和其他帮助材料,看起来我正在做他们要求的一切,但运气不佳。所有内容似乎都正确加载和绑定,但当我更改集合中某个项的“IsLoading”属性时,绑定到IsLoading属性的网格(请参见下面的DataTemplate)的可见性不会更改

以下是我的列表框XAML:

        <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;
    }