DependencyProperty Strangeness - PullRequest
       17

DependencyProperty Strangeness

0 голосов
/ 09 февраля 2009

Я собрал приложение WPF, используя ObservableCollection и Dependency Properties, что здорово, потому что мне просто нужно добавить элемент в ObservableCollection, и он появляется автоматически, например Я отображаю объекты в коллекции в виде блоков на экране в обертке, в каждом из которых отображается Title.

Итак, я хотел, чтобы каждый элемент показывал не только свой Title плюс префикс или суффикс, но свойство объекта зависимости даже не использовалось. Я могу поставить точку останова, и она никогда не будет достигнута.

Может ли кто-нибудь просветить меня, почему, если я добавлю текст в исходящее свойство, этот текст никогда не будет виден? Я читал, что значение на самом деле «хранится не в объекте, а в WPF», но я не понимаю, что это значит.

Почему текст этот текст НЕ будет виден никогда не выводится объектом зависимости?

public class ApplicationItem : DependencyObject
{

    public string Title
    {
        get
        {
            return (string)GetValue("this text will NOT be seen: " + TitleProperty);
        }
        set
        {
            SetValue(TitleProperty, "this text will be seen: " + value);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 09 февраля 2009

TitleProperty - это не обычное свойство, а свойство зависимости, поэтому, если вы хотите получить значение вашего TitleProperty, вам нужно сделать:

var title = (string)GetValue(TitleProperty);

В руководстве WPF открытое свойство для доступа к свойству зависимости не вызывается WPF и механизмом привязки (необязательно). Это общедоступное свойство используется только вашим кодом. Таким образом, вы НЕ ДОЛЖНЫ добавлять логику кода в ваше публичное свойство.

Но вы можете использовать FrameworkPropertyMetadata, когда зарегистрируете DP и предоставите CoerceValueCallback для изменения установленного значения.

Вы также можете использовать IValueConverter со своей привязкой.

0 голосов
/ 09 февраля 2009

Я получил это, чтобы работать для меня:

public string Title
{
    get 
    { 
        string value = (string)GetValue(TitleProperty); 
        return value + " postfix";
    }
    set 
    { 
        SetValue(TitleProperty, "Prefix " + value); 
    }
}

Есть ли причина, по которой вы пытаетесь изменить значение при его получении, а не просто изменять его при установке значения?

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