У меня есть приблизительно 100 TextBoxes в Форме. Я должен проверить их, если они являются десятичными, например. Это работает, но это является слишком подробным, я не хочу иметь 800 вместо 100 строк в XAML.
<TextBox.Text>
<Binding Path="MyPath" UpdateSourceTrigger="PropertyChanged" Stringformat="{}{0:N}" NotifyOnValidationError="True">
<Binding.ValidationRules>
<myRulesNamespace:MyValidationRule ValidationType="decimal" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Есть ли какой-либо путь, как переписать его к краткой форме как это?:
Text="{Binding MyPath, UpdateSourceTrigger='PropertyChanged', StringFormat='{}{0:N}', NotifyOnValidationError=True, ValidationRules NOW WHAT?}"
Краткий ответ: Вы не мочь. Свойство Validation-rules представляет собой коллекцию, и в настоящее время нет возможности записать их в сокращении Binding.
Однако вы можете создать класс, наследующий от Binding, например:
public class SuperBinding:Binding
{
public SuperBinding()
{
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
ValidationRules.Add(new MyValidationRule{ValidationType = typeof(decimal)});
//set rest of properties
}
}
И затем использовать его вместо обычного тега Binding.
Если вы содержали свои 100 текстовых полей в элементе управления контейнером списка, таком как ListBox или ListView, вы могли бы поместить эту привязку в DataTemplate. Затем к каждому элементу будет применяться правило проверки.
Поскольку можно повторно шаблонизировать любой контейнерный элемент управления, вы все равно сможете получить желаемый макет.