2013-05-29 41 views
2

我想使ComboBox綁定到我的數據,篩選器。爲此我創建了一個TextBox和一個ComboBox。在後面的代碼中,我讀取一個文件並生成存儲爲ComboBox項目的Channel類對象。雖然編譯器不會引發錯誤,但過濾功能無法正常工作。如果我寫了一些東西,數據不見了,如果我擦除,它就回來了。嘗試並嘗試之後,我意識到如果我開始輸入「myNamespace.myChannel」(Unico.Canal),數據仍然存在,但不要過濾。奇怪的行爲,的確如此。我懷疑我把東西放在了錯誤的地方。正在過濾CollectionViewSource

enter image description hereenter image description hereenter image description here

(爲了更好的理解,我翻譯的代碼,運河=通道)

這裏是我的代碼的方案:

namespace Unico 
{ 
     public partial class ControlesArchivo : UserControl, INotifyPropertyChanged 
     { 
      public ControlesArchivo() 
      { 

       InitializeComponent();   
      } 

    public ObservableCollection<Channel> myListChannels //with INotifyPropertyChanged implemented. But I think I don't need it. 

    private void loadButton_Click(object sender, RoutedEventArgs e) 
      { 

       File loadedFile = new File(); 
       loadedFile.read(); //Generates a bunch of data in lists. 

       foreach (Channel mychan in loadedFile.channels) //Just duplicating the data (maybe this can be avoided) 
        { 
        myListChannels.Add(mychan); 
        } 

     var view = CollectionViewSource.GetDefaultView(this.miListaDeCanales); 
         view.Filter = delegate(object o) 
         { 
          if (o.ToString().Contains(myTextBox.Text)) //Delicate place 
          { 
           return true; 
          } 
          return false; 
         }; 

       myComboBox.ItemsSource = view; 
    DataContext = this; 
    } 


    private void myTextBox_TextChanged(object sender, TextChangedEventArgs e) 
      { 


         ((ICollectionView)myComboBox.ItemsSource).Refresh(); 
         myComboBox.SelectedIndex = 0; 

      } 


     } 
    } 

數據以綁定XAML與:

ItemsSource="{Binding view}" 

編輯:我想我知道問題在哪裏:我沒有指定要過濾的屬性。我的意思是,您在ComboBox中看到的是myListChannels中列出的class Channel的屬性channelName。當我設置過濾器時,我不應該讓我知道我在過濾什麼?我怎麼寫這個?非常感謝你。

回答

1

是的,你的假設是正確的。

我與你的翻譯假設,

public ObservableCollection<Channel> myListChannels; 

實際上

public ObservableCollection<Canal> miListaDeCanales; 

與類Canal命名空間中的Unico

更新:

喲如果您尚未從System.Object覆蓋ToString(),請嘗試使用在ComboBox中呈現的屬性,而不是在objecto)上使用ToString()

嘗試切換

if (o.ToString().Contains(myTextBox.Text)) 

if (((Canal)o).NameProperty.Contains(myTextBox.Text)) 

^^應該解決您的問題。

你有一個DataTemplateComboBox.ItemTemplate在XAML。這將解釋爲什麼你看到在ComboBox中呈現的有效值,否則所有ComboBoxItem的也將呈現爲Unico.Canal

+0

你是我的英雄。 – Sturm

相關問題