Xaml如何一次启用/禁用和验证文本项

时间:2016-12-08 07:44:40

标签: c# mvvm data-binding devexpress-wpf

使用MVVM,Devexpress WPF,c#

例如,我在视图中有两个项目(我在实际项目中有更多项目)并使用它们供用户输入一些搜索参数并需要验证它们并同时禁用另一个项目,如果在第一个中写入了某些内容田野和过度。

我做的是,我使用Validate来确定值的长度,即使输入文本的长度不符合要求的长度,我也需要启用/禁用

查看 XAML:

<dxe:TextEdit

  Text="{Binding SearchField1, UpdateSourceTrigger=PropertyChanged}"
  Validate="searchFieldValidate"/>

<dxe:TextEdit
      IsEnabled="{Binding IsTextItemEnabled}"
      Text="{Binding SearchField2, UpdateSourceTrigger=PropertyChanged}"
      Validate="searchFieldValidate"/>

C#

private void searchFieldValidate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            if (e.Value == null) return;
            if (e.Value.ToString().Length > 5) return;
            e.IsValid = false;
            e.ErrorType = DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning;
            e.ErrorContent = "Enter more than 5 symbol";
        }

视图模型 在这里我设置IsTextItemEnabled取决于值为空或mot

public string SearchField1
        {
            get { return _searchField1; }
            set
            {
                if (value != _searchField1)
                {
                    _searchField1 = value;

                    if (!String.IsNullOrEmpty(value))
                        IsTextItemEnabled = false;
                    else
                        IsTextItemEnabled = true;

                    RaisePropertiesChanged("SearchField1");
                }
            }
        }

问题是RaisePropertiesChanged在字段长度达不到5个符号之前不起作用

你能帮我解决这个问题吗?首先,我试图禁用一个字段,所以我使用一个bool IsTextEnabled ..对于oposite变体...

1 个答案:

答案 0 :(得分:0)

我给TextEdit提供了名字

<dxe:TextEdit
 Name="txtEdit1"
 Text="{Binding SearchField1, UpdateSourceTrigger=PropertyChanged}"
 Validate="searchFieldValidate"/>

<dxe:TextEdit
 Name="txtEdit2"
 Text="{Binding SearchField2, UpdateSourceTrigger=PropertyChanged}" />

并添加一行以验证程序:

txtEdit2.IsEnabled = String.IsNullOrEmpty(e.Value?.ToString());

所以现在我可以一次验证并启用/禁用..这次不要使用OnPropertiesChanged