我有以下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
的{{1}}中来使其更小,更容易管理,并使用以下代码进行调用:
MissingValuesListView
但是,添加新元素后,列表不再更新。
<local:MissingValuesListView></local:MissingValuesListView>
后面的代码仅包含MissingValuesListView
。
我认为这没有任何意义(因为代码在主xaml文件的一部分中有效,但在移至UserControl时无效),但是DataContext = new MyViewModel();
和MyViewModel
的实现{{1 }}。
我的问题是为什么这不起作用?我以为我缺少一些代码或某些绑定,但是我无法找出原因。非常感谢您的帮助!
答案 0 :(得分:1)
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
属性是从其父元素定义的,并且绑定应该像以前一样工作。