WPF: можно ли добавлять или изменять привязки с помощью стилей или чего-то подобного? - PullRequest
1 голос
/ 15 апреля 2010

Я все еще изучаю веревки WPF, поэтому, если следующий вопрос тривиален или мой подход неуместен, пожалуйста, говорите ... Я пытаюсь уменьшить шаблон, и кажется, что стили - это обычный способ Сделай так. В частности:

У меня есть куча довольно обыденных полей для ввода данных. Элементы управления для этих полей имеют различные свойства, которые я хотел бы установить в зависимости от цели привязки - довольно обычный материал. Однако я бы также хотел бы установить свойства самой привязки в стиле, чтобы избежать повторения.

Например:

<TextBox Style="{StaticResource myStyle}">
    <TextBox.Text>
        <Binding Path="..." Source="..."
                 ValidatesOnDataErrors="True"
                 ValidatesOnExceptions="True"
                 UpdateSourceTrigger="PropertyChanged">
        </Binding>
    </TextBox.Text>
</TextBox>

Теперь, есть ли способ использовать стилизацию или какой-то другой метод для написания предыдущего примера, примерно так:

<TextBox Style="{StaticResource myStyle}" Text="{Binding Source=... Path=...}/>

То есть, есть ли способ установить все привязки, которые соответствуют определенному выбору (здесь, на элементах управления со стилем myStyle), для проверки данных и использования определенного триггера обновления? Возможно ли привязать шаблон или стиль самих привязок?

Как вариант, можно ли добавить привязку в самом стиле?

Очевидно, что второй синтаксис намного, намного короче и более читабелен, и я хотел бы иметь возможность избавиться от других подобных шаблонов, чтобы сохранить мой код пользовательского интерфейса понятным для себя: -).

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

Вы просто не можете использовать стили для изменения свойств в привязке.Вместо этого вы можете использовать следующую форму, чтобы сделать вещи красивее:

<TextBox Style="{StaticResource myStyle}"
         Text="{Binding SomePath,Source=SomeSource,ValidatesOnDataErrors=True,ValidatesOnExceptions=True,UpdateSourceTrigger=PropertyChanged}" />

Еще одна вещь, которую вы можете сделать, это извлечь класс из Binding и использовать его в качестве пользовательского расширения разметки.В своем конструкторе производного класса вы можете установить все общие значения по умолчанию, например PropertyChanged для UpdateSourceTrigger и т. Д.

0 голосов
/ 21 июня 2012

Вы можете указать привязку внутри таблицы данных. Проблема заключается в том, чтобы получить эту табличку с данными в нужное вам текстовое поле. Таким образом, вместо этого вы устанавливаете шаблон данных для включения текстового поля, а затем задаете для контента ContentControl этот статический шаблон ресурса, например:

<DataTemplate x:Key="BoundTextbox">
    <TextBlock TextAlignment="Right" VerticalAlignment="Center" TextWrapping="WrapWithOverflow">
        <TextBlock.Text>
            <Binding Path="Path" Source="Source"
                ValidatesOnDataErrors="True"
                ValidatesOnExceptions="True"
                UpdateSourceTrigger="PropertyChanged" />
        </TextBlock.Text>
    </TextBlock>
</DataTemplate>

<ContentControl ContentTemplate="{StaticResource BoundTextbox}" Content="" />

Последняя строка - это то, что вам нужно сделать, поместить в свою пользовательскую запись / страницу XAML.

Но обязательно добавьте таблицу данных в свой словарь ресурсов, чтобы вы могли ссылаться на нее как на статический ресурс в вашем usercontrol / page.

...