我想使ComboBox
綁定到我的數據,篩選器。爲此我創建了一個TextBox
和一個ComboBox
。在後面的代碼中,我讀取一個文件並生成存儲爲ComboBox
項目的Channel類對象。雖然編譯器不會引發錯誤,但過濾功能無法正常工作。如果我寫了一些東西,數據不見了,如果我擦除,它就回來了。嘗試並嘗試之後,我意識到如果我開始輸入「myNamespace.myChannel」(Unico.Canal),數據仍然存在,但不要過濾。奇怪的行爲,的確如此。我懷疑我把東西放在了錯誤的地方。正在過濾CollectionViewSource
(爲了更好的理解,我翻譯的代碼,運河=通道)
這裏是我的代碼的方案:
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
。當我設置過濾器時,我不應該讓我知道我在過濾什麼?我怎麼寫這個?非常感謝你。
你是我的英雄。 – Sturm