2011-03-06 38 views
1

我試圖將一個多選列表框綁定到list<int>(IdProv)我有。我所做的就是將SelectedValue綁定到一個屬性,該屬性將該值添加到list<int>或將其刪除。 list<int>和listbox.SelectedItems都應該同步。列表框沒有更新SelectedItems.Add()

列表框的XAML代碼如下所示:

  <ListBox DisplayMemberPath="Name" 
        SelectedValuePath="Id" 
        SelectedValue="{Binding Path=IdProv, 
            Mode=OneWayToSource, 
            ValidatesOnExceptions=True}" 
        SelectionMode="Multiple" /> 

的的ItemsSource設置在代碼隱藏。它是具有Id和Name屬性的產品列表

問題存在於未正確更新(SelectedItem)的SelectedValue屬性中。只有當第一個項目被選中時才設置它們,但是它們會被更新。

此外,當選擇在列表上單擊的項目時,SelectedValue僅在單擊首次添加的項目時更新。

任何想法是怎麼回事?我確信我在綁定中犯了一個愚蠢的錯誤,但這花了我幾個小時,我無法弄清楚!

感謝,馬丁

+0

我有一個問題。你是否想從列表框中進行多選,並且想要綁定它?即您想要在列表框 – whoisthis 2011-03-07 00:09:45

+0

上進行可綁定的多選。將'list '直接綁定到'SelectedItems'會很好,但我認爲這很困難(因爲我想綁定到每個項目的Id屬性) – 2011-03-07 00:18:08

+0

此鏈接肯定會幫助你。 http://denismorozov.blogspot.in/2010/07/wpf-listboxselecteditemsadd-doesnt.html謝謝 – 2012-08-23 11:19:48

回答

0

我做了一個簡單的黑客,我不是很滿意,但可以解決該問題。我寫了這個SelectionChanged處理程序,負責設置SelectedValue未更新的屬性:

private void idProveedorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ListBox list = (ListBox)sender; 
     if (list.SelectedItems.Count == 0) 
     { 
      ProdList.Last().IdProv.Clear(); 
      return; 
     } 
     else 
     { 
      Models.Proveedor lastSelected = list.SelectedItems[list.SelectedItems.Count - 1] as Models.Proveedor; 
      if (lastSelected != list.SelectedItem) 
       PProdList.Last().IdProveedorInt = lastSelected.Id; 
     } 
    }