Har*_*rsh 1 c# vb.net data-binding wpf listview
我在wpf中创建了一个用户控件,它包含一个文本框和一个列表视图.现在,我想将一个类对象绑定到我将使用此控件的表单中的列表视图.所以,基本上我想动态设置listview的绑定.
这可能很简单,但我是wpf的新手,这对我来说是一个巨大的任务.请为此建议一个解决方案.
您需要将您ListView的ItemsSource属性绑定到类实例的集合(我建议使用ObservableCollection).您可以将收集到ListView的DataContext,例如.然后绑定将是公正的
<ListView ItemsSource={Binding} .../>
Run Code Online (Sandbox Code Playgroud)
这是更有益的创建一个类来包含这个集合与您的任何其他的目的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; }
}
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的集合.当当!:)
| 归档时间: |
|
| 查看次数: |
7973 次 |
| 最近记录: |