#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