Установка «свойства зависимости» в коде - PullRequest
0 голосов
/ 29 марта 2010

Сегодня я в движении ...

У меня есть следующий код, разделяющий свойство зависимости внутри класса ActionScreen:

#region Dependency Properties & Methods

public string DescriptionHeader
{
    get { return (string)GetValue(DescriptionHeaderProperty); }
    set { SetValue(DescriptionHeaderProperty, value); }
}

// Using a DependencyProperty as the backing store for DescriptionHeader.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty DescriptionHeaderProperty =
    DependencyProperty.Register("DescriptionHeader", typeof(string), typeof(ActionScreen), new UIPropertyMetadata("xxx"));

#endregion

Я связываюсь с этим свойством в моемXaml как:

                    <GridViewColumn DisplayMemberBinding="{Binding Description}" Header="{Binding DescriptionHeader}" Width="350" />

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

public string DescColText { set { this.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate() { DescriptionHeader = value; })); } }

Ответы [ 2 ]

0 голосов
/ 01 апреля 2010

Привет разрешил это, я не устанавливал текст данных страницы.

Видимо, мне нужно было сделать

this.DataContext = this;
0 голосов
/ 30 марта 2010

Я столкнулся с этой же проблемой. Кажется, что изменение свойства зависимостей не вызывает уведомления о том, что свойство фактически изменилось. Вам следует сделать это вручную. В своем коде реализуйте интерфейс INotifyPropertyChanged, а при регистрации свойства зависимости добавьте делегат PropertyChangedCallback. (Пример) * +1001 *

public static readonly DependencyProperty DescriptionHeaderProperty = DependencyProperty.Register("DescriptionHeader", typeof(string), typeof(ActionScreen), new UIPropertyMetadata("xxx", new PropertyChangedCallback(DisplayTextChange)));

    private static void DisplayTextChange(DependencyObject dpo, DependencyPropertyChangedEventArgs args)
            {
                ((WhatEverYourClassNameIs)dpo).NotifyPropertyChanged("DescriptionHeader");

            }

Вот пример реализации INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}

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

...