我有以下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文件变得太大,我想通过在名为ListView
的UserControl
中提取此MissingValuesListView
并使用以下代码调用它来使其更小且更易于管理:
<local:MissingValuesListView></local:MissingValuesListView>
但是,添加新元素时不再更新列表。
MissingValuesListView
的代码背后只包含DataContext = new MyViewModel();
。
我不认为它有任何相关性(因为代码在主要xaml文件的一部分时起作用,但在移动到UserControl时不起作用),但MyViewModel
和MissingValue
implment INotifyPropertyChanged
。
我的问题是为什么这不起作用?我假设我缺少一些代码或一些绑定,但我没有找到什么。任何帮助都非常感谢!
MissingValuesListView的代码仅包含
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
属性是从其父元素定义的,绑定应该像以前一样工作。