将类对象绑定到 wpf 中的列表视图

本文关键字:列表 视图 wpf 对象 绑定 | 更新日期: 2023-09-27 18:32:51

我在 wpf 中创建了一个用户控件,它由一个文本框和一个列表视图组成。现在,我想从将使用此控件的窗体中将类对象绑定到列表视图。所以,基本上我想动态设置列表视图的绑定。

这可能很简单,但我是 wpf 的新手,这对我来说是一项艰巨的任务。请为此提出解决方案。

将类对象绑定到 wpf 中的列表视图

你需要将ListViewItemsSource属性绑定到类实例的集合(我建议为此使用ObservableCollection(。例如,您可以将集合放入ListViewDataContext中。那么绑定将只是

<ListView ItemsSource={Binding} .../>
创建一个

类来包含此集合以及UserControl可能需要的任何其他对象并将此类的实例传递给UserControlDataContext会更有用。这是指 MVVM 模式。

编辑

可以在代码隐藏或 xaml 中设置 DataContext。假设我们有一个包含集合的类:

public class ViewModel
{
    public ViewModel()
    {
        Products = new ObservableCollection<Product>()
        {
            new Product("book"),
            new Product("chair"),
            new Product("table"),
            new Product("bookshelf"),
        }
    }
    ObservableCollection<Product> Products { get; set; }
}

下面介绍如何在代码中设置 UserControl 的 DataContext:

userControl.DataContext = new ViewModel();

其中,用户控件是用户控件的实例。

以下是在 xaml 中执行的操作方法:

<UserControl ...
             xmlns:vm="namespace_containing_class_ViewModel">
    <UserControl.DataContext>   
        <!-- Following line instantiates the ViewModel class and calls its parameterless constructor -->
        <vm:ViewModel />
    </UserControl.DataContext>
    ...
    <ListView ItemsSource="{Binding Products}"/>
    ...
</UserControl>

两种变体都做完全相同的事情。请注意,ItemsSource="{Binding Products}"意味着Binding.Path属性设置为"产品",并将在 ListView 的数据上下文中搜索此路径。如果未显式设置 ListView 的 DataContext(如上述情况所示(,则其 DataContext 与其父级的 DataContext 相同。如果未设置父级的 DataContext,则它与父级父级的 DataContext 相同,依此类推。因此,在本例中,ListView 的 DataContext 与 UserControl 的 DataContext 相同,并且是一个包含产品集合的 ViewModel 类实例。哒!:)