将类对象绑定到wpf中的listview

Har*_*rsh 1 c# vb.net data-binding wpf listview

我在wpf中创建了一个用户控件,它包含一个文本框和一个列表视图.现在,我想将一个类对象绑定到我将使用此控件的表单中的列表视图.所以,基本上我想动态设置listview的绑定.

这可能很简单,但我是wpf的新手,这对我来说是一个巨大的任务.请为此建议一个解决方案.

EvA*_*lex 5

您需要将您ListViewItemsSource属性绑定到类实例的集合(我建议使用ObservableCollection).您可以将收集到ListViewDataContext,例如.然后绑定将是公正的

<ListView ItemsSource={Binding} .../>
Run Code Online (Sandbox Code Playgroud)

这是更有益的创建一个类来包含这个集合与您的任何其他的目的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; }
}
Run Code Online (Sandbox Code Playgroud)

以下是如何在代码中设置UserControl的DataContext:

userControl.DataContext = new ViewModel();
Run Code Online (Sandbox Code Playgroud)

其中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>
Run Code Online (Sandbox Code Playgroud)

两种变体完全相同.请注意,这ItemsSource="{Binding Products}"意味着该Binding.Path属性设置为"Products",并且将在ListView的DataContext中搜索此路径.如果没有显式设置ListView的DataContext(如上面提到的那样),那么它的DataContext与其Parent的DataContext相同.如果未设置父级的DataContext,则它与父级的父级DataContext相同,依此类推.因此,在这种情况下,ListView的DataContext与UserControl的DataContext相同,并且是一个ViewModel类实例,它包含Products的集合.当当!:)