将 ListView 项绑定到可编辑的组合框选定值

弗拉卡斯

我有一个 ListView 和一个 ComboBox。它们都绑定到填充了数据库项的同一个 List。

  1. 我希望 ListView 项目反映 ComboBox 中的选定项目(即,当用户选择“Name0”时,我希望列表视图仅显示 Name0 行)。如果我从下拉列表中选择项目,它会起作用,但是当我在组合框中键入文本(可编辑)时,如果文本与组合项目内容不匹配(即,如果我键入“Name01”或如果我使用反斜杠删除文本)。我试图将搜索字符串更改为 ComboBox 的 Text 属性,但这样列表仅在我第二次选择该项目时更新(如果我选择“Name0”,则没有任何反应,如果我选择“Name1”,则列表显示“ Name0”行)。

  2. 此外,我还想在组合中搜索子字符串的文本(即,如果我输入“4”,我希望列表视图显示“Name4”行)但它只从单词的第一个字母搜索文本。要实现这我尝试使用 Table.Select 而不是 String.Contains 但没有任何变化。任何帮助都非常感谢。希望我的问题足够清楚(我是一名业余程序员)。

这是我的代码:

namespace LVCombo
{
    public partial class MainWindow : Window
    {
        DataSet MyDataSet = new DataSet();
        public static List<Persons> MyList = new List<Persons>();
        public MainWindow()
        {
            InitializeComponent();
            DataTable MyDataTable = MyDataSet.Tables.Add("MyDataTable");
            MyDataTable.Columns.Add("Name", typeof(string));
            MyDataTable.Columns.Add("Age", typeof(int));
            AddData(MyDataTable);
            CreateList();
            MyListView.ItemsSource = MyList;
            MyCombo.ItemsSource = MyList;
        }`

        private void AddData(DataTable table)
        {
            for (int i = 0; i < 10; i++)
            {
                DataRow row = table.NewRow();
                row["Name"] = "Name" + i.ToString();
                row["Age"] = "4" + i.ToString();
                table.Rows.Add(row);
            }
        }

        public class Persons
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }

        private void CreateList()
        {
            foreach(DataRow row in MyDataSet.Tables[0].Rows)
            {
                MyList.Add(new Persons() { Name=row["Name"].ToString(), Age= (int)row["Age"]});
            }
        }

        private void MyCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox combo = sender as ComboBox;
            List<Persons> SelectedPersons = new List<Persons>();
            MyListView.ItemsSource = SelectedPersons;
          //  string person = combo.SelectedValue.ToString().ToLower();
               string person = combo.Text.ToLower();

            //Table.Select version
            DataRow[] FilteredRows = MyDataSet.Tables[0].Select(string.Format("{0} LIKE '%{1}%'", MyDataSet.Tables[0].Columns["Name"], person));
            for(int i = 0; i < FilteredRows.Length; i++)
            {
                SelectedPersons.Add(new Persons()
                {
                    Name = FilteredRows[i]["Name"].ToString(),
                    Age = (int)FilteredRows[i]["Age"]
                });
                MyListView.ItemsSource = SelectedPersons;
            }


            //String.Contains version

         /*   foreach (DataRow row in MyDataSet.Tables[0].Rows)
            {
                if (row["Name"].ToString().ToLower().Contains(person))
                {
                    SelectedPersons.Add(new Persons() { Name = row["Name"].ToString(), Age = (int)row["Age"] });
                }
            MyListView.ItemsSource = SelectedPersons;*/

        }
    }
}

和我的 XAML:

<Window x:Class="LVCombo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:LVCombo"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
        <ListView Name="MyListView">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Name}" Margin="10"/>
                        <TextBlock Text="{Binding Age}" Margin="10"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <ComboBox Name="MyCombo" DisplayMemberPath="Name" SelectedValuePath="Name" IsEditable="True" 
                  Height="22" Width="100" VerticalAlignment="Top" SelectionChanged="MyCombo_SelectionChanged"/>
    </StackPanel>
</Grid>

弗拉卡斯

我想通了,我发布了一个答案,以防万一其他人遇到同样的问题。我应该使用 TextBoxBase.TextChanged 事件而不是 Combobox.SelectionChanged 事件。这样做可以解决这两个问题。

<ComboBox Name="MyCombo" IsEditable="True" TextBoxBase.TextChanged="MyCombo_TextChanged"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将ListView选定项绑定到用户控件

来自分类Dev

将ListView绑定到ObservableSet

来自分类Dev

将Listview内的组合框绑定到ObservableCollection <string>

来自分类Dev

将 ListView 字段绑定到代码隐藏中的值

来自分类Dev

将类绑定到ListView数据模板

来自分类Dev

将 Observable 集合绑定到 ListView

来自分类Dev

将 ListView 标签绑定到属性

来自分类Dev

如何将 ObservableCollection 绑定到 ListView?

来自分类Dev

将图像循环到ListView

来自分类Dev

将图像循环到ListView

来自分类Dev

将值从ListView传递到EditText

来自分类Dev

将值从ListView传递到EditText

来自分类Dev

如何将ListView选定的项目绑定到其他控件?

来自分类Dev

将组合框选择绑定到 datagridview 的当前行

来自分类Dev

将选定的ListView项目显示到TextView中

来自分类Dev

如何将空值绑定到包含可编辑格式的所有行的jqgrid

来自分类Dev

具有可编辑组合框的WPF可编辑Listview

来自分类Dev

将ListView项设置为选中

来自分类Dev

将ObservableCollections的ObservableCollection绑定到TabControl TabItems中的嵌套ListView

来自分类Dev

以Xamarin形式将ReactiveList <T>绑定到ListView

来自分类Dev

ListView中的WPF,MVVM,EventBehaviourFactory,将事件绑定到命令

来自分类Dev

如何将列表列表绑定到ListView控件

来自分类Dev

ListView-将listviewitem数据绑定到对象

来自分类Dev

使用ItemTemplate中的GridView将List <DataTable>绑定到ListView

来自分类Dev

C#WPF将字典绑定到Listview

来自分类Dev

Xamarin形式:将*共享资源*图像绑定到ListView?

来自分类Dev

WPF:将ListView绑定到数据结构

来自分类Dev

将ListViewItem ContextMenu MenuItem命令绑定到ListView的ItemsSource的ViewModel

来自分类Dev

如何将ListView / CollectionView的DataTemplate绑定到ViewModel属性

Related 相关文章

  1. 1

    将ListView选定项绑定到用户控件

  2. 2

    将ListView绑定到ObservableSet

  3. 3

    将Listview内的组合框绑定到ObservableCollection <string>

  4. 4

    将 ListView 字段绑定到代码隐藏中的值

  5. 5

    将类绑定到ListView数据模板

  6. 6

    将 Observable 集合绑定到 ListView

  7. 7

    将 ListView 标签绑定到属性

  8. 8

    如何将 ObservableCollection 绑定到 ListView?

  9. 9

    将图像循环到ListView

  10. 10

    将图像循环到ListView

  11. 11

    将值从ListView传递到EditText

  12. 12

    将值从ListView传递到EditText

  13. 13

    如何将ListView选定的项目绑定到其他控件?

  14. 14

    将组合框选择绑定到 datagridview 的当前行

  15. 15

    将选定的ListView项目显示到TextView中

  16. 16

    如何将空值绑定到包含可编辑格式的所有行的jqgrid

  17. 17

    具有可编辑组合框的WPF可编辑Listview

  18. 18

    将ListView项设置为选中

  19. 19

    将ObservableCollections的ObservableCollection绑定到TabControl TabItems中的嵌套ListView

  20. 20

    以Xamarin形式将ReactiveList <T>绑定到ListView

  21. 21

    ListView中的WPF,MVVM,EventBehaviourFactory,将事件绑定到命令

  22. 22

    如何将列表列表绑定到ListView控件

  23. 23

    ListView-将listviewitem数据绑定到对象

  24. 24

    使用ItemTemplate中的GridView将List <DataTable>绑定到ListView

  25. 25

    C#WPF将字典绑定到Listview

  26. 26

    Xamarin形式:将*共享资源*图像绑定到ListView?

  27. 27

    WPF:将ListView绑定到数据结构

  28. 28

    将ListViewItem ContextMenu MenuItem命令绑定到ListView的ItemsSource的ViewModel

  29. 29

    如何将ListView / CollectionView的DataTemplate绑定到ViewModel属性

热门标签

归档