Ответ 1
Вы проверили этот http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
EDIT: Пожалуйста, найдите здесь образец http://www.filefactory.com/file/b3b4cb7/n/ValidationErrorsSample.zip
НТН
Я хочу отображать предупреждения и ошибки при проверке бизнес-объекта и визуально отображать их пользователю.
Например, у меня есть класс бизнес-объекта, реализующий такой интерфейс:
interface IOrderItem : IDataErrorInfo
{
int ProductId { get; set; }
string ProductName { get; set; }
decimal Price { get; set; }
IDictionary<string, string> Warnings { get; }
}
Это связано с пользовательским интерфейсом следующим образом:
<TextBox Text="{Binding Price, ValidatesOnDataErrors=True}/>
Ошибка:
Это хорошо работает и рисует красную рамку вокруг текстового поля, когда я помещаю сообщение об ошибке в бизнес-объект с помощью интерфейса IDataErrorInfo
.
Что я хотел бы сделать, это также указать предупреждения, например:
Эти предупреждения помещают оранжевую рамку вокруг текстового поля и сообщают пользователю, что может быть проблема, но не останавливать их.
Предупреждения сохраняются в строковом словаре, сопоставляющем PropertyName = > WarningMessage аналогично IDataErrorInfo
.
Вопрос: Каков наилучший способ сделать это?
Вы проверили этот http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
EDIT: Пожалуйста, найдите здесь образец http://www.filefactory.com/file/b3b4cb7/n/ValidationErrorsSample.zip
НТН
Один из хороших способов сделать это - это особый стиль, который имел datatriggers в свойстве проверки (возможно, оставить VSM и gotostateaction.
Пример из одного из моих проектов:
<i:Interaction.Triggers>
<ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Unknown">
<ei:GoToStateAction StateName="UnknownState"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Pass">
<ei:GoToStateAction StateName="PassState"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Fail">
<ei:GoToStateAction StateName="FailState"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Terminated">
<ei:GoToStateAction StateName="FailState"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding UnitData.TestState, Mode=OneWay}" Value="Warn">
<ei:GoToStateAction StateName="WarnState"/>
</ei:DataTrigger>
<ei:DataTrigger Binding="{Binding UnitData.TestState}" Value="Indeterminate">
<ei:GoToStateAction StateName="IndeterminateState"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
У CSLA.Net есть элемент управления PropertyStatus, который используется для этой цели (ошибка, предупреждение или информация), а также дополнительные функции, связанные с остальной частью CSLA. Но вы можете посмотреть на код (с открытым исходным кодом) на то, как он обрабатывается там.
Похоже, вы также можете использовать конвертер на границе цвета, привязанный к объекту (или предупреждающий словарь, но со всем объектом, с которым вы могли бы справиться с ошибками через IDataErrorInfo) с параметром преобразователя, чтобы указать свойство для проверки для. Я уверен, что вы могли бы упростить это дальше, с некоторой привязанностью, используя синтаксис привязки элемента или что-то в этом роде. Конвертер вернет цвет, который вы хотите отобразить.