如何将 ObservableCollection 绑定到 UserControl 中的 ListView?

How to bind ObservableCollection to the ListView in a UserControl?

我有以下 xaml 文件:

<Page ...>
    <Grid>
        <ListView ItemsSource="{Binding MissingValues}">
            <ListView.View>
                <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Information on Missing Values">
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Element.Name}" Header="Element" Width="100" />
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Description}" Header="Description" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

后面的代码只有:

DataContext = new MyViewModel();

并且MyViewModel已经在构造函数中初始化了public ObservableCollection<MissingValue> MissingValues。单击按钮时,项目将添加到此 属性 并且一切正常。

由于 xaml 文件变得太大,我想通过在名为 MissingValuesListViewUserControl 中提取此 ListView 并调用它使用以下代码:

<local:MissingValuesListView></local:MissingValuesListView>

但是,当添加新元素时,列表不再更新。

MissingValuesListView后面的代码只包含DataContext = new MyViewModel();.

我认为它没有任何相关性(因为代码在主 xaml 文件的一部分时有效,但在移至 UserControl 时无效),但 MyViewModelMissingValue 实现 INotifyPropertyChanged.

我的问题是为什么这不起作用?我假设我遗漏了一些代码或一些绑定,但我没有找到是什么。非常感谢任何帮助!

MissingValuesListView's code behind contains only DataContext = new MyViewModel();.

不应该。尝试删除此行。您只需将以下 XAML 复制到 MissingValuesListView.xaml 并在当前 XAML 文件中将其替换为 <local:MissingValuesListView />

<ListView ItemsSource="{Binding MissingValues}">
    <ListView.View>
        <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Information on Missing Values">
            <GridViewColumn DisplayMemberBinding="{Binding Path=Element.Name}" Header="Element" Width="100" />
            <GridViewColumn DisplayMemberBinding="{Binding Path=Description}" Header="Description" />
        </GridView>
    </ListView.View>
</ListView>

如果这样做,UserControl 将继承 DataContext,其中 MissingValues 属性 是从其父元素定义的,绑定应该像以前一样工作.