簡體   English   中英

如何綁定`BindingList <Pair<string,string> &gt;到`ListView`,以便當字符串更改時listview更新?

[英]How to bind a `BindingList<Pair<string,string>> to a `ListView` such that when the strings change the listview updates?

我有一個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;
    }
}

為了明確BindingListBindingList只是我當前正在嘗試使用的集合,我可以使用能夠支持此功能並持有Pair<string,string>任何集合。

我手頭沒有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}"  

使用Winforms進行數據綁定有兩個重要的接口。

IBindingList-此問題與“集合”有關,當添加新元素或刪除元素時,它將更新控件。 BindingList已經實現了它,因此您不必擔心。 如果要在沒有此界面的情況下測試行為,則可以使用簡單的List進行測試。

INotifyPropertyChanged-此對象與“對象”有關,當對象的屬性之一發生變化(對象的值已更改)時,它將更新控件。 您的“對”類應實現此接口。 這是微不足道的。 您只需添加一個Sub PropertyChanged()即可引發一個事件,並在您的屬性設置器中添加對此Sub的調用。

如果需要樣本,可以看看MSDN。

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

恢復 :

No IBindingList =>在集合中添加或刪除對象時,控件不會更新。

否INotifyPropertyChanged =>當對象的屬性更改時,控件不會更新。

編輯-當然,控件必須支持Binding,而傳統ListView則不是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM