Howto WPF Binding написано inline = краткая форма - PullRequest
7 голосов
/ 29 июня 2010

У меня есть около 100 текстовых полей в форме. Мне нужно проверить их, например, если они десятичные. Это работает, но это слишком многословно, я не хочу иметь 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?}"

Ответы [ 2 ]

6 голосов
/ 29 июня 2010

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

2 голосов
/ 29 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...