Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ObservableCollection绑定到UserControl中的ListView?_C#_Wpf_Data Binding_Wpf Controls_Observablecollection - Fatal编程技术网

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

C# 如何将ObservableCollection绑定到UserControl中的ListView?,c#,wpf,data-binding,wpf-controls,observablecollection,C#,Wpf,Data Binding,Wpf Controls,Observablecollection,我有以下xaml文件: <Page ...> <Grid> <ListView ItemsSource="{Binding MissingValues}"> <ListView.View> <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Information on Missing Values"

我有以下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>
并且
MyViewModel
在构造函数中初始化了
public observeablecollection MissingValues
。在单击按钮时,项目将添加到此属性,并且所有内容都将按exptected方式工作

由于xaml文件变得太大,我希望通过在名为
MissingValuesListView
UserControl
中提取此
ListView
并使用以下代码调用它,使其更小、更易于管理:

<local:MissingValuesListView></local:MissingValuesListView>

但是,添加新元素后,列表将不再更新

MissingValuesListView
的代码隐藏仅包含
DataContext=new MyViewModel()

我不认为这有任何关系(因为代码在作为主xaml文件的一部分时工作,但在移动到UserControl时不工作),但是
MyViewModel
MissingValue
Implement
INotifyPropertyChanged

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

MissingValuesListView的代码隐藏仅包含
DataContext=new MyViewModel()

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

<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
属性是从其父元素定义的,绑定应该像以前一样工作。

MissingValues在哪里?你确定里面有数据吗?移动listview时是否丢失了itemssource绑定?这个新的usercontrol看起来像什么?不要在其代码隐藏中设置usercontrol的DataContext(到第二个视图模型实例)。它将自动从页面继承。通常,UserControl永远不应该显式设置自己的DataContext。它的子元素要么直接绑定到继承的DataContext,要么绑定到控件公开的依赖属性。@Clemens你说得对,谢谢!这很有道理。
<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>