为了账号安全,请及时绑定邮箱和手机立即绑定

IsEditable、ItemsSource 和 ValidationRule 的 WPF

IsEditable、ItemsSource 和 ValidationRule 的 WPF

C#
交互式爱情 2022-01-16 14:30:43
我正在尝试做的是以下内容。我有一个绑定到自定义类的组合框,其中 ItemsSource、DisplayMembePath 设置为该类的属性。这本身很好用,所有的绑定都有效。我的问题跳到底部。        <ComboBox Name="Field" Width="{Binding FieldWidth}" ItemsSource="{Binding LookupValues}" DisplayMemberPath="Description" SelectedValue="{Binding SelectedValue}"               Grid.Column="1" HorizontalAlignment="{Binding FieldAlignment}" Margin="{Binding FieldMargin}" IsEditable="True"/>我的自定义类非常基本:public class LookupValue : ILookupValue{    public LookupValue() { }    public LookupValue(CODETABLE codeTable)    {        Id = codeTable.ID;        Name = codeTable.CODE;        Description = codeTable.DESCR;    }    public int Id { get; set; }    public string Name { get; set; }    public string Description { get; set; }    public int? Sequence { get; set; }    public override bool Equals(object obj)    {        if (obj is LookupValue)        {            LookupValue lookupValue = (LookupValue)obj;            return Id == lookupValue.Id && String.Compare(Name, lookupValue.Name) == 0 && String.Compare(Description, lookupValue.Description) == 0;        }        return false;    }    public override int GetHashCode()    {        return Id;    }我的视图模型的相关部分也是如此    public ILookupValue SelectedValue    {        get {            return (ILookupValue)GetValue(SelectedValueProperty);        }        set { SetValue(SelectedValueProperty, value); NotifyPropertyChanged("SelectedValue"); }    }除了 ComboBox 上的 IsEditable=true 部分外,一切正常。要求是允许用户输入他们自己的值,而不必是列表中的内容之一。但是对于必填字段,我还需要验证是否输入或选择了某些内容。我的问题:我正在使用 ValidationRules 进行检查,但对于自定义条目,它总是会发送一个空值。只要选择更改为新的预定义选项,绑定只会更新。当我输入自定义值或我输入的内容偏离预定义选项时,它不会更新。例如,如果 USA 是一个选项,我输入 Underpants,当我输入 U 时它会更新为 USA,但在我输入其余单词时会停留在 USA。如果我从一个与列表中任何内容都不匹配的字母开始,它将保持为空。我试过的:根据其他一些类似但不相同的问题的建议,我尝试向我的 SelectedValue getter 添加一个空检查并创建一个新的 LookupValue。这似乎没有任何效果。我还尝试绑定到字符串列表并自己处理与我的自定义类列表的匹配,但即使对于字符串列表,行为也是相同的。我已经设法解决了第二个问题,方法是绑定 KeyUp 事件并将 SelectedValue 设置为新的 LookupValue(如果没有匹配项)。但这仍然无助于 ValidationRules 问题。任何帮助都会很棒。
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

经过大量的反复试验,我找到了以下修复程序,可以满足我的需求。我没有绑定到 SelectedItem 属性,而是绑定到 Text 属性。然后,如果在失去焦点事件中需要,我可以使用输入的信息创建一个新的列表项。


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信