Стиль для привязок? - PullRequest
       1

Стиль для привязок?

4 голосов
/ 21 апреля 2011

У меня есть несколько текстовых полей в пользовательском элементе управления:

<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Text="{Binding Path=Street, UpdateSourceTrigger=PropertyChanged}"></TextBox>

Есть ли способ в XAML сделать что-то вроде стиля для моих привязок, чтобы мне не приходилось писать для каждого текстового поля UpdateSourceTrigger=PropertyChanged, а только часть Path=?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 22 апреля 2011

Я тоже был очень раздражен написанием какой-то безумной длинной связывающей фразы КАЖДЫЙ раз, когда я хотел привязать к свойству, поэтому я делал это больше года, прежде чем наткнулся на этот пост. 1004 *

Это в основном подклассы MarkupExtension (то есть класс Binding) абстрактного класса с именем BindingDecoratorBase, который предоставляет все свойства, которые предоставляет класс Binding. Оттуда вы можете сделать что-то вроде этого:

public class SimpleBinding : BindingDecoratorBase
{
  public SimpleBinding(string path) : this()
  {
    Path = new System.Windows.PropertyPath(path);
  }
  public SimpleBinding()
  {
    TargetNullValue = string.Empty;
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
  }
}

И тогда все, что вам нужно сделать в xaml, это включить ваше пространство имен вверху, а затем для привязки к элементу управления сделайте что-то вроде этого:

<TextBox Text="{m:SimpleBinding Name}"></TextBox>
<TextBox Text="{m:SimpleBinding Street}"></TextBox>

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

2 голосов
/ 21 апреля 2011

Нет, нет способа сделать это через XAML или стиль. Лучшее, на что вы можете надеяться, - это создать собственный элемент управления, который изменяет поведение по умолчанию. Что-то вроде:

public class MyTextBox : TextBox {
    static MyTextBox() {
        TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata() { DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
    }
}

Тогда вам нужно будет использовать MyTextBox вместо TextBox.

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