Как добавить рамку в текстовое поле в редактируемом списке? - PullRequest
0 голосов
/ 23 января 2011

У меня есть редактируемое поле со списком в приложении wpf-mvvm.

Я хотел бы добавить границу для текстового поля в редактируемом комбинированном списке.(Эта граница будет красной ... если пользователь вводит некоторые недопустимые записи в поле со списком.)

Пожалуйста, помогите.

<ComboBox ItemsSource="{Binding Path = ContractNumberList }" Width="90" IsEditable="True" SelectedItem="{Binding Path = ContractNumber,Mode=TwoWay}"
Text="{Binding Path = ContractNumber, UpdateSourceTrigger=LostFocus}">
</ComboBox>

РЕДАКТИРОВАТЬ : Мне нужнопереопределить шаблон элемента моего редактируемого поля со списком.Я знаю, что редактируемый комбинированный список будет содержать два элемента => текстовое поле и список.Мне нужно добавить рамку в это текстовое поле.

Ответы [ 2 ]

1 голос
/ 24 января 2011

Вы можете использовать ValidationRules для этого, но я думаю, что это будет довольно сложно, так как вам нужно будет передать ему ContractNumberList, чтобы проверить правильность. Более простой способ - заставить ViewModel реализовать IDataErrorInfo, установить ValidatesOnDataErrors="True" для Text Binding, а затем выполнить проверку действительности из вашей ViewModel. Это может выглядеть примерно так

<ComboBox ItemsSource="{Binding Path=ContractNumberList}"
          Width="90"
          IsEditable="True"
          SelectedItem="{Binding Path=ContractNumber,
                                 Mode=TwoWay}"
          Text="{Binding Path=ContractNumber,
                         UpdateSourceTrigger=LostFocus,
                         ValidatesOnDataErrors=True}"/>

Просмотр модели

public class YourViewModel : IDataErrorInfo
{
    // ...
    public string ContractNumber
    {
        get;
        set;
    }
    // etc.

    #region IDataErrorInfo Members

    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get
        {
            string returnValue = string.Empty;
            if (columnName == "ContractNumber")
            {
                if (ContractNumberList.IndexOf(ContractNumber) < 0)
                {
                    returnValue = "Invalid selection";
                }
            }
            return returnValue;
        }
    }

    #endregion
}
0 голосов
/ 23 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...