Свойство зависимости в WPF / SilverLight - PullRequest
3 голосов
/ 11 марта 2010

Я искал в Google информацию о том, как начать работу со свойством зависимости, используемым в WPF / silverlight, но не получил никакого представления о свойстве зависимости, может кто-нибудь рассказать мне об этом с точки зрения новичка, чтобы Я получил некоторое представление об этом и использую это в своем проекте

спасибо заранее.

Может ли кто-нибудь дать мне ссылку или пример кода простого приложения, которое просто объясняет, что такое свойство зависимости ??? Я буду очень благодарен

Ответы [ 5 ]

7 голосов
/ 12 марта 2010

Я считаю, что реализация DependencyProperty часто состоит из четырех частей:

  • Сама DependencyProperty
  • Недвижимость с get и set
  • Статический измененный обработчик
  • Обработчик изменения экземпляра

Вы можете добавить свойство зависимости в UserControl, чтобы вы могли связывать данные с чем-то в DataContext, где создается экземпляр UserControl. Например, вы можете добавить свойство в SoUserControl:

    #region SampleProperty // Demo for SO 2424526

    public static readonly DependencyProperty SamplePropertyProperty
        = DependencyProperty.Register("SampleProperty", typeof(int), typeof(SoUserControl), new PropertyMetadata(OnSamplePropertyChanged));


    /// <summary>
    /// Demo for SO 2424526
    /// Gets or sets dependency property.
    /// </summary>
    public int SampleProperty
    {
        get { return (int)GetValue(SamplePropertyProperty); }
        set { SetValue(SamplePropertyProperty, value); }
    }

    /// <summary>
    /// Handld changes to SamplePropertyProperty by calling a handler in the associated object.
    /// </summary>
    /// <param name="obj">object the property is associated with</param>
    /// <param name="e">details of change</param>
    static void OnSamplePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        (obj as SoUserControl).OnSamplePropertyChanged(e);
    }

    /// <summary>
    /// Handle changes to the SamplePropertyProperty dependency property.
    /// </summary>
    /// <param name="e">details of change</param>
    private void OnSamplePropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        int SamplePropertyNewValue = (int)e.NewValue;
        // do something with the internal logic of the control
    }

    #endregion
4 голосов
/ 11 марта 2010

Из моего использования со свойствами зависимости. Они становятся наиболее важными при связывании. Когда вы привязываете для отображения обычного свойства, начальная привязка будет работать отлично, однако пользовательский интерфейс не всегда будет обновляться при изменении свойства, и в этом случае вы можете реализовать INotifyPropertyChanged для вашего класса и вызвать событие NotifyPropertyChanged, но свойство Dependency обновит для вас без реализации INotifyProperty Изменено.

Триггеры еще один большой. Если вы хотите создать триггер для запуска анимации WPF всякий раз, когда для одного из ваших свойств задано определенное значение ... тогда вам нужно отключить свойство зависимости.

DepenedencyProperties могут быть реализованы только для типов, которые являются производными от DependencyObject. UIElement является производным от Visual, который является производным от DependencyObject, поэтому большинство свойств элементов управления .Net уже являются свойствами зависимостей. И при создании и регистрации моих собственных DependencyProperties это обычно в моих пользовательских UserControls, которые наследуются от UIElement.

Мне было очень неприятно, когда я впервые попытался создать свойство зависимости в одном из моих обычных классов (лучше использовать INotifyPropertyChanged здесь)

Ссылки: http://msdn.microsoft.com/en-us/library/ms752914.aspx, http://www.wpftutorial.net/DependencyProperties.html

1 голос
/ 11 марта 2010

Загляните в блог Луиса Абреу: http://msmvps.com/blogs/luisabreu/

У него много информации о свойствах зависимостей и о том, как их использовать.

0 голосов
/ 12 сентября 2011

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

Свойство зависимости - это та же идея для значений или содержимого. лениво вычисляет необходимое значение на основе других значений, от которых зависит. он может кэшировать значение, и когда нижележащие части «грязные», то есть что-то изменилось, он распространит - сделает недействительным - все уровни, которые зависят от него.

объект должен иметь возможности DependencyObject для участия (то есть, чтобы движок узнал об этом, чтобы ввести его в цепочку).

механизм является универсальным и нефиксированным, не существует только одного интерфейса для соответствия. но это несколько сложнее, чем я сказал.

Я нашел хорошее объяснение, чтобы связать мое понимание, в следующем сообщении в блоге: http://blog.hackedbrain.com/2004/12/04/understanding-dependencyobject-and-dependencyproperty/

0 голосов
/ 11 марта 2010

Вы должны прочитать книгу, для начала.

Я прочитал WPF в действии с Visual Sutdio 2005 от Мэннинга.

В качестве ответа на отрицательную пунктуацию, только что предоставленную мне, свойство зависимости является частью более крупного плана под названием WPF, и невозможно понять свойства зависимости без основ.

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

Кроме того, на веб-сайте MSDN имеется бесплатная информация о WPF и свойстве зависимости.

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