如何绑定`BindingList <pair <string,string>&gt;到一个`ListView`,这样当字符串改变listview更新?

时间:2016-11-25 11:38:22

标签: c# winforms listview

我有一个BindingList<Pair<string,string>>(其中Pair只是你的沼泽标准通用,包含两个相关的对象)。我希望能够将其绑定到ListView,以使.First值位于第1列,.Second值位于第2列。此外,我该如何确定列表视图不断表示列表的内容,这样如果我更改其中一个字符串ListView会自动更新?

以下是我的Pair<TI,TJ>课程供参考:

public class Pair<TI, TJ>
{
    public TI First;
    public TJ Second;

    public Pair(TI first, TJ second)
    {
        First = first;
        Second = second;
    }
}

为了澄清,BindingList只是我目前正在尝试使用的集合,我可以使用任何能够支持此功能的集合并持有Pair<string,string>

2 个答案:

答案 0 :(得分:0)

我手头没有IDE,但主要取决于你是否使用WinForms或XAML / WPF。因为它可能是最后一个(更现代化),一些提示:

  • 可能你需要一个ObservableCollection,如果集合中的某些内容发生变化,绑定就会起作用。
  • 要绑定到您的数据,您需要在WPF中绑定它们,并设置数据上下文。

一般来说,它看起来像这样:

<ListView ItemsSource="{Binding ListOfYourData}"
        SelectedItem="{Binding Path=SelectedItem}"
 ...

<ListView.View>
  <GridView>
    <GridViewColumn Width="140" Header="First"
       DisplayMemberBinding="{Binding First}"  
    <GridViewColumn Width="140" Header="Second"
       DisplayMemberBinding="{Binding Second}"  

答案 1 :(得分:0)

使用Winforms进行数据绑定有两个重要的接口。

IBindingList - 这一个问题&#34;收集&#34;并在添加新元素或删除元素时更新控件。 BindingList已经实现了它,因此您不必注意。 如果要在没有此接口的情况下测试行为,可以使用简单的List进行测试。

INotifyPropertyChanged - 这一个问题&#34;对象&#34;并且当对象更改其属性之一(对象的值已更改)时将更新控件。你的班级&#34;配对&#34;应该实现这个接口。这是微不足道的。你必须添加一个Sub PropertyChanged()来引发一个事件,并在你的属性的setter中添加这个Sub的调用。

如果您想要样本,可以查看MSDN。

https://msdn.microsoft.com/fr-fr/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

简历:

没有IBindingList =&gt;在集合中添加或删除对象时,控件不会更新。

否INotifyPropertyChanged =&gt;当对象的属性发生变化时,控件不会更新。

编辑 - 当然控件必须支持Binding,而不是传统ListView的情况......