我在 wpf 中创建了一个用户控件,它由一个文本框和一个列表视图组成。现在,我想将一个类对象从我将使用此控件的表单绑定到列表视图。所以,基本上我想动态设置列表视图的绑定。
这可能很简单,但我是 wpf 的新手,这对我来说是一项艰巨的任务。请为此提出解决方案。
我在 wpf 中创建了一个用户控件,它由一个文本框和一个列表视图组成。现在,我想将一个类对象从我将使用此控件的表单绑定到列表视图。所以,基本上我想动态设置列表视图的绑定。
这可能很简单,但我是 wpf 的新手,这对我来说是一项艰巨的任务。请为此提出解决方案。
您需要将您ListView
的ItemsSource
属性绑定到您的类实例的集合(我建议为此使用 ObservableCollection)。例如,您可以将集合放入ListView
'sDataContext
中。然后绑定将只是
<ListView ItemsSource={Binding} .../>
UserControl
创建一个类来包含此集合以及您可能需要的任何其他对象并将此类的实例传递给UserControl
's会更有用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();
其中 userControl 是您的 UserControl 的一个实例。
以下是在 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
属性设置为“Products”,并且将在 ListView 的 DataContext 中搜索此路径。如果 ListView 的 DataContext 没有显式设置(如上面提到的情况),它的 DataContext 与它的 Parent 的 DataContext 相同。如果未设置父级的 DataContext - 那么它与父级的父级 DataContext 相同,依此类推。因此在这种情况下,ListView 的 DataContext 与 UserControl 的 DataContext 相同,并且是一个 ViewModel 类实例,其中包含产品集合。达达!:)