Событие WPF UserControl вызывается только один раз? - PullRequest
0 голосов
/ 17 мая 2010

Мне нужно связать двустороннее свойство пользовательского элемента управления со свойством содержащего пользовательский элемент управления. Мне также нужно установить значение по умолчанию для свойства из кода в дочернем элементе (это не может быть легко сделано из тегов XAML).

Если я вызываю мой код из дочернего конструктора , значение устанавливается в родительском элементе, но процедура обратного вызова change не запускается (насколько я понимаю, родитель еще существует на момент создания ребенка).

Мой текущий обходной путь - перехватить дочернее событие Loaded и вызвать код из обработчика. Однако, поскольку Loaded вызывается более одного раза, мне нужно установить флаг, чтобы установить свойство только в первый раз. Мне не нравится этот способ, но я не знаю, можно ли использовать событие одиночного выстрела или это можно сделать иначе . Есть ли отзывы, основанные на вашем опыте?

1 Ответ

1 голос
/ 17 мая 2010

Для значения по умолчанию используйте DependencyProperty и передайте FrameworkPropertyMetadata объект, содержащий значение по умолчанию, например,

    public static readonly DependencyProperty ProductNameProperty =
            DependencyProperty.Register(
                "ProductName",
                typeof(string),
                typeof(ProductTextBox),
                new FrameworkPropertyMetadata(null, // Default Value
                    FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                    new PropertyChangedCallback(ChangeProductName)) );

Если значение по умолчанию является переменной для каждого экземпляра и отличается, то возможно сочетание

SetValue(ProductNameProperty, value_required); 
PropertyChanged(this, new PropertyChangedEventArgs("ProductName")); 

Возможно, как в конструкторе, так и отправить PropertyChanged в загруженном событии, если оно не работает в конструкторе. Я на самом деле не пробовал это ...

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