Привязка WPF с практическими рекомендациями, записанная встроенный = краткая форма

У меня есть приблизительно 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?}"
7
задан PaN1C_Showt1Me 29 June 2010 в 13:59
поделиться

2 ответа

Краткий ответ: Вы не мочь. Свойство 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.

6
ответ дан 7 December 2019 в 05:17
поделиться

Если вы содержали свои 100 текстовых полей в элементе управления контейнером списка, таком как ListBox или ListView, вы могли бы поместить эту привязку в DataTemplate. Затем к каждому элементу будет применяться правило проверки.

Поскольку можно повторно шаблонизировать любой контейнерный элемент управления, вы все равно сможете получить желаемый макет.

2
ответ дан 7 December 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: