Привязать к DependencyProperty в пользовательском классе - PullRequest
4 голосов
/ 13 декабря 2011

У меня проблемы с привязкой к пользовательскому классу. Кажется, свойство зависимости не получает правильное значение из моей модели представления. Вот мой пользовательский класс:

    public class DataResource : DependencyObject
        {

            public static readonly DependencyProperty ContentProperty =
                DependencyProperty.Register("Content",
                    typeof(object),
                    typeof(DataResource));

            public object Content
            {
                get { return (object)GetValue(ContentProperty); }
                set { SetValue(ContentProperty, value); }
            }

        }

И в моих ресурсах UserControl у меня есть:

    <UserControl.Resources>
        <local:DataResource x:Key="dataResource" Content="{Binding Test}"></data:DataResource>
    </UserControl.Resources>

«Тест» в моей ViewModel - это свойство, с которым я могу связать метку без проблем. Я что-то не так делаю в этой реализации?

Обновление: это работает, если я наследую от Freezable вместо DependencyObject. Я не совсем уверен, почему, надеюсь, кто-то может объяснить это.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Нет никакого контекста в Resources, DataResource нужно было бы поместить где-то в UserControl, чтобы он мог наследовать DataContext так, чтобы связывание (что относительно DataContext, еслиисточник определен) завершен.

(проблема в том, что DependencyObject даже не имеет "реального" DataContext, поскольку это свойство принадлежит FrameworkElement, если вам повезетхотя это искусственный контекст)

0 голосов
/ 14 декабря 2011

Вы также можете использовать метод FrameworkElement.SetBinding для свойства Dependency в своем коде. Тогда вам не нужно задавать контекст данных для всей страницы (поскольку DataContext и DP плохо сочетаются).

Вот MSDN на этом: http://msdn.microsoft.com/en-us/library/ms598273.aspx

Пример:

MyData myDataObject = new MyData(DateTime.Now);      
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
myText.SetBinding(TextBlock.TextProperty, myBinding);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...