【发布时间】:2019-02-27 15:19:09
【问题描述】:
我有以下 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 文件变得太大,我想通过在名为 UserControl 的 UserControl 中提取此 ListView 并使用以下代码调用它来使其更小且更易于管理:
<local:MissingValuesListView></local:MissingValuesListView>
但是,添加新元素时列表不再更新。
MissingValuesListView后面的代码只包含DataContext = new MyViewModel();。
我认为它没有任何相关性(因为代码在主 xaml 文件的一部分时有效,但在移至 UserControl 时无效),但 MyViewModel 和 MissingValue 实现 INotifyPropertyChanged。
我的问题是为什么这不起作用?我假设我缺少一些代码或一些绑定,但我没有找出什么。非常感谢任何帮助!
【问题讨论】:
-
缺失值在哪里?你确定里面有数据?当您移动列表视图时,您是否以某种方式丢失了 itemssource 绑定?这个新的用户控件是什么样的?
-
不要在后面的代码中设置 UserControl 的 DataContext(到第二个视图模型实例)。它将自动从页面继承。通常,UserControl 永远不应显式设置其自己的 DataContext。它的子元素要么直接绑定到继承的 DataContext,要么绑定到控件公开的依赖属性。
-
@Clemens 你是对的,谢谢!这很有意义。
标签: c# wpf data-binding wpf-controls observablecollection