繁体   English   中英

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

[英]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文件太大,因此我想通过在名为MissingValuesListViewUserControl提取此ListView并使用以下代码来调用它来使其更小,更易于管理:

<local:MissingValuesListView></local:MissingValuesListView>

但是,添加新元素时,列表不再更新。

MissingValuesListView的代码后面仅包含DataContext = new MyViewModel();

我认为这没有任何意义(因为代码在主xaml文件的一部分时起作用,而在移至UserControl时MyViewModel ),但是MyViewModelMissingValueMyViewModel 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM