2

我想使用filterComboBox绑定我的数据。为此,我创建了 a和 a 。在后面的代码中,我读取了一个文件并生成了 Channel 类的对象,这些对象存储为. 尽管编译器没有抛出错误,但过滤不能正常工作。如果我写了一些东西,数据就消失了,如果我擦除,它又回来了。在尝试和尝试之后,我意识到如果我开始输入“myNamespace.myChannel”(Unico.Canal),数据仍然存在,但不要过滤。确实是奇怪的行为。我怀疑我把东西放错了地方。TextBoxComboBoxComboBox

在此处输入图像描述在此处输入图像描述在此处输入图像描述

(为了更好地理解我已经翻译了代码,Canal=Channel)

这是我的代码方案:

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 中看到的是myListChannelschannelNameclass Channel列出的属性。当我设置过滤器时,我不应该让我知道我在过滤什么吗?我怎么能写这个?非常感谢你。

4

1 回答 1

1

是的,你的假设是正确的。

我假设你的翻译,

public ObservableCollection<Channel> myListChannels;

实际上是

public ObservableCollection<Canal> miListaDeCanales;

Canal命名空间中的类Unico

更新:

在您的过滤器中ComboBox,如果ToString()您没有从.objectoToString()System.Object

尝试切换

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

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

^^ 那应该可以解决您的问题。

你在 xaml 中有一个DataTemplatefor吗?ComboBox.ItemTemplate这将解释为什么您会看到在 中呈现的有效值ComboBox,否则所有ComboBoxItem' 也将呈现为Unico.Canal

于 2013-05-29T15:23:25.377 回答