Свойство зависимости: получение, но не настройка

#wpf #dependency-properties

#wpf #свойства зависимости

Вопрос:

 public static readonly DependencyProperty SingleGridLengthProperty = DependencyProperty.Register("SingleGridLength", typeof(double), typeof(MapConverter));

public class MapConverter : DependencyObject, INotifyPropertyChanged, IMultiValueConverter
{
    public double SingleGridLength
    {
        get { return (double)GetValue(MapConverter.SingleGridLengthProperty); }
        set 
        {
            SetValue(MapConverter.SingleGridLengthProperty, value);
            OnNotifyPropertyChanged("SingleGridLength");
        }
    }

<local:MapConverter x:Key="MapConverter"
SingleGridLength="{Binding SingleGridLength, RelativeSource={RelativeSource Self}}" />
  

У меня есть конвертер с набором свойств зависимости, привязанных к .xaml

Проблема, с которой я сталкиваюсь, заключается в том, что каждое свойство «получает» и возвращает значение, но оно никогда не «устанавливает» значение. Разрешено ли мне использовать свойства зависимости в конвертерах? Или я должен подойти к этому по-другому? Заранее спасибо!

Ответ №1:

Во-первых, ваша привязка недопустима. Вы привязываете свойство SingleGridLength к самому себе. Вам нужно было бы привязать его к другому свойству / объекту.

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

Ответ №2:

Взгляните на делегат PropertyChangedCallback, который вы можете указать в конструкторе PropertyMetadata. Обратный вызов будет вызван при изменении значения свойства вашей зависимости, и вы можете поместить свой код обработки в этот метод обратного вызова.

Ответ №3:

Я предлагаю использовать конвертер, основанный на IValueConverter? Затем преобразователь должен выполнять вычисления только из входного формата в выходной. Значение, возвращаемое преобразователями

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  

и

 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  

будет использоваться свойством, к которому вы выполнили привязку.

Смотрите: http://msdn.microsoft.com/de-de/library/system.windows.data.ivalueconverter.aspx