【问题标题】:How to add new values to ComboBox after pressing the ENTER key?按下 ENTER 键后如何向 ComboBox 添加新值?
【发布时间】:2015-11-26 21:22:08
【问题描述】:

如果你能帮助我,我会很高兴。我是 WPF 的新手。

我遇到了关于 ComboBox 的问题。我正在使用 Ado.Net Entity Framework 5 从 MySql 服务器检索作业数据。我的 ComboBox 需要显示这些作业的 ID,并且它需要可编辑才能添加新 ID。问题是,一旦我输入了组合框中不存在的新 ID,然后按 ENTER,什么也没有发生。我需要在按 ENTER 后将新值添加到 ComboBox 的绑定列表中。我被告知要使用 LOSTFOCUS(因为 PropertyChange 将为每个击键调用,并且每个击键都将被视为组合框列表中的一个新值)但没有任何反应。我还被告知它与行为和命令有关。由于我是新手,我发现困难。 你能告诉我这个问题的解决方案吗? :)

Job.cs

public class Job {
    public string JobId { get; set; }
    public string JobTitle { get; set; }
}

MainWindow.xaml:

<ComboBox Name="JobIdComboBox" DisplayMemberPath="JobID" ItemsSource="{Binding JobsList, Mode=TwoWay}" SelectedItem ="{Binding JobSelectedItem}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="147" Margin="360,37,0,0" Grid.Row="1" Height="30" FontSize="18" IsReadOnly="False" IsEditable="True" Text="{Binding Path=JobNewItem,UpdateSourceTrigger=LostFocus}"/>

MainWindow.xaml.cs:

namespace JobsApp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }

    }

}

MainViewModel.cs

public class MainViewModel:INotifyPropertyChanged
{

        JobsDbEntities jobsDbEntitiesInstance = new JobsDbEntities();


        public MainViewModel()
        {
            FillJobs();
        }

        private void FillJobs()
        {
            var q = (from Jobs in jobsDbEntitiesInstance.certificateheader
                     select Jobs).ToList();

            JobsList = q;


        }


        private List<Job> _jobsList;

        public List<Job> JobsList
        {
            get { return _jobsList; }
            set
            {
                _jobsList = value;
                OnPropertyChanged();
            }
        }

        private Job _jobSelectedItem;

        public Job JobSelectedItem
        {
            get { return _jobSelectedItem; }

            set
            {
                _jobSelectedItem = value;
                OnPropertyChanged();
            }

        }   




        private string _jobNewItem;

        public string JobNewItem
        {

            get { return _jobNewItem; }

            set
            {
                if (value != null)
                {
                    _jobNewItem = value;
                    OnPropertyChanged();

                    var jobNewElement = new Job {JobID = _jobNewItem};

                    _jobsList.Add(jobNewElement);
                    JobSelectedItem = jobNewElement;

                }

            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

}

【问题讨论】:

    标签: c# wpf xaml combobox


    【解决方案1】:

    你快到了。将 UpdateSourceTrigger 从 LostFocus 更改为 PropertyChanged。

    Text="{Binding Path=JobNewItem,UpdateSourceTrigger=PropertyChanged}"/>
    

    【讨论】:

    • 嗨。问题是一旦我这样做了,每次按下的按键都会导致更新。这种情况会导致性能问题,并且我需要添加一个数据结构以保留每个键,直到按下 ENTER。有人告诉我,它可以通过使用 Behaviors 来解决,但我不知道如何实现它。你能帮助我吗? :)
    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2016-07-27
    • 2014-05-08
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多