将类对象绑定到 wpf 中的列表视图
本文关键字:列表 视图 wpf 对象 绑定 | 更新日期: 2023-09-27 18:32:51
我在 wpf 中创建了一个用户控件,它由一个文本框和一个列表视图组成。现在,我想从将使用此控件的窗体中将类对象绑定到列表视图。所以,基本上我想动态设置列表视图的绑定。
这可能很简单,但我是 wpf 的新手,这对我来说是一项艰巨的任务。请为此提出解决方案。
你需要将ListView
的ItemsSource
属性绑定到类实例的集合(我建议为此使用ObservableCollection(。例如,您可以将集合放入ListView
的DataContext
中。那么绑定将只是
<ListView ItemsSource={Binding} .../>
创建一个类来包含此集合以及UserControl
可能需要的任何其他对象并将此类的实例传递给UserControl
的DataContext
会更有用。这是指 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 类实例。哒!:)