Привязка данных DependencyProperty - PullRequest
1 голос
/ 05 августа 2011

Я пытаюсь привязать свой пользовательский интерфейс к пользовательскому DependencyProperty:

<Window.Resources>
    <local:Localization x:Key="Localization" xmlns:x="#unknown" xmlns:local="#unknown"/>
</Window.Resources>
    <Grid Name="mainStack" DataContext="{StaticResource Localization}">
         <Button Padding="10,3" Margin="5" Content="{Binding BtnAdd}" Command="New"/>
    </Grid>

Также у меня есть класс «Локализация»:

class Localization : DependencyObject, INotifyPropertyChanged
    {
        public static DependencyProperty BtnAddProperty;

        static Localization()
        {
            BtnAddProperty = DependencyProperty.Register("BtnAdd", typeof(string), typeof(Localization));

        }

        public string BtnAdd
        {
            set
            {
                SetValue(BtnAddProperty, value);
            }
            get
            {
                return (string)GetValue(BtnAddProperty);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
                handler.Invoke(this, e);
            }
        }

        public Localization()
        {
            BtnAdd = MainWindowRes.BtnAdd;
        }

        public void SwitchLanguage()
        {
            BtnAdd = MainWindowRes.BtnAdd;
            OnPropertyChanged("BtnAdd");
        }

    }

Первый раз, когда мой элемент пользовательского интерфейса получает значение моего свойства.Но когда я использую свой метод SwitchLanguage (), свойство получает новые данные, а пользовательский интерфейс по-прежнему имеет первое значение.

Может кто-нибудь мне помочь, пожалуйста?

PS Извините, за мой английский.

Евгений

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Я попробовал ваш пример, все вроде бы работает.
Но есть некоторые подводные камни:

  • Есть класс фреймворка под названием Localization, поэтому убедитесь, что вы не перепутали!
  • Как вы звоните SwitchLanguage()?Вы должны назвать это в нужном случае!(Например, в коде:

    var res = (Локализация) Ресурсы ["Локализация"];
    res.SwitchLanguage ();

0 голосов
/ 05 августа 2011

Не могу обнаружить ошибку, из-за которой привязка не обновляется, но есть некоторые другие вещи, которые необходимо исправить, поле DP должно быть доступно только для чтения, и вы не должны вызывать уведомления об изменении свойств для DP, поскольку они имеютвнутренний механизм для уведомлений (внутри SetValue).

Вы уверены, что значение MainWindowRes.BtnAdd на самом деле отличается в SwitchLanguage от значения, которое оно имеет в конструкторе?

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