[英]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文件太大,因此我想通过在名为MissingValuesListView
的UserControl
提取此ListView
并使用以下代码来调用它来使其更小,更易于管理:
<local:MissingValuesListView></local:MissingValuesListView>
但是,添加新元素时,列表不再更新。
MissingValuesListView
的代码后面仅包含DataContext = new MyViewModel();
。
我认为这没有任何意义(因为代码在主xaml文件的一部分时起作用,而在移至UserControl时MyViewModel
),但是MyViewModel
和MissingValue
都MyViewModel
INotifyPropertyChanged
。
我的问题是为什么这不起作用? 我以为我缺少一些代码或某些绑定,但是我无法找出原因。 任何帮助深表感谢!
MissingValuesListView的代码后面仅包含
DataContext = new MyViewModel();
。
不应该这样 尝试删除此行。 您只需将以下XAML复制到MissingValuesListView.xaml
并在当前XAML文件MissingValuesListView.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
将继承其父元素定义了MissingValues
属性的DataContext
,并且绑定应该像以前一样工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.