在WPF中绑定可编辑的组合框并检测插入的文本

3

我有一个 ComboBox,它看起来像这样:

<ComboBox
    ItemsSource="{Binding JobList}"
    SelectedValue="{Binding Job,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
    DisplayMemberPath="Title"
    SelectedValuePath="Id"
    IsEditable="True"
    StaysOpenOnEdit="True"
    />

并且它绑定到我的ViewModel,看起来像这样:

public class ViewModel {
    // this will fill from a database record for a person
    public Job Job {
        get { return _job; }
        set {
            if(value == _job) return;
            _job = value;
            OnPropertyChanged( () => Job );
        }
    }
    // this will fill from all jobs records in database
    public ObservableCollection<Job> JobList 
    { /* do same as Job to implementing INotifyPropertyChanged */ }
}

任务是:Job

public class Job {
    public int Id { get; set; }
    public string Title { get; set; }
}

我希望能够用工作列表填充ComboBox。如果用户指定的Job在列表中,用户可以从列表中选择它,否则,用户将在ComboBox中输入新的Job.Title,视图模型会发出通知,并创建一个新的Job项目并将其添加到JobList中。

你有任何想法吗?能帮我一下吗?


那么到底哪里出了问题?从你发布的内容来看,一切似乎都是正确的。另外,你能否发布一下你如何设置视图的DataContext? - shriek
看看@Simon_D在这里的建议(https://dev59.com/fHA75IYBdhLWcg3wS3BA) - Adolfo Perez
问题在于“作业”属性是“作业”类型,且视图模型无法检测到组合框文本输入。如果我将“工作”设置为字符串类型并绑定“ComboBox.Text”属性,则无法检测所选项的“ID”。 - amiry jd
1个回答

5
  1. 在viewModel中创建一个字符串属性,比如'SelectedJobName'
  2. 将此属性绑定到Combobox.Text
  3. 无论何时您想要使用输入的值(命令、Presenter),都要检查所选值是否不为null,并且selectedJobName属性值不匹配/匹配。

1
有点晚但还不错:D 我以前也是这样做的。但你是新人,所以我接受并赞同了你的回答。加油! - amiry jd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接