Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject? / 8 сообщений из 8, страница 1 из 1
19.02.2012, 17:45
    #37669352
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
Добрый день!

Недавно буквально налетел на подводный камень WPF, почему то после прочтения книги MaкДональда была строгая уверенность, что так делать можно.

Имеется 2 класса наследника от DependencyObject, в каждом из них определено по 1 DependencyProperty. Оказалось что нельзя напрямую связать Binding'ом эти 2 св-ва! Более того нельзя определить Binding ни для одного DepProperty определенного в классе напрямую унаследованном от DependencyObject.

При попытке сделать Binding получаю ошибку:
Код: c#
1.
Cannot find governing FrameworkElement or FrameworkContentElement for target element.



Вот xaml разметка, код классов можно посмотреть в исходниках, но там ничего инетересного, просто 2 класса и по 1 DependencyProperty в каждом.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
        <HeaderedContentControl Header="Здесь привязываю IsChecked к св-ву IsMyActive(Все работает отлично!)">
            <StackPanel>
                <CheckBox Content="Check" IsChecked="{Binding ElementName=evm, Path=IsMyActive}"/>
                <ContentControl>
                    <local:EditVM x:Name="evm" IsMyActive="False"/>
                </ContentControl>
            </StackPanel>
        </HeaderedContentControl>

        <HeaderedContentControl Header="Здесь пытаюсь IWillChange привязать к св-ву IsChecked моего CheckBox'а(Ничего не выходит!)">
            <local:VM IWillChange="{Binding ElementName=Check, Path=IsChecked}"/>
        </HeaderedContentControl>
...



Исходники прилагаются.
...
Рейтинг: 0 / 0
19.02.2012, 18:17
    #37669378
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
Никто не знает? В этом случае получается, что DependencyProperty определенные в классах унаследованных от DependencyObject теряют полностью свою актуальность... это же бред полный...
...
Рейтинг: 0 / 0
19.02.2012, 18:38
    #37669397
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
xpoft2010,

авторIWillChange="{Binding ElementName=Check , Path=IsChecked}
где собственно элемент с этим именем?

нет элемента - не будет работать!
...
Рейтинг: 0 / 0
19.02.2012, 19:01
    #37669417
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
сорри, много вариантов пробовал, не тот выложил, но в любом случае дело не в этом вот исправленный вариант, аналогичная ситуация.


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
<HeaderedContentControl Header="Здесь привязываю IsChecked к св-ву IsMyActive(Все работает отлично!)">
            <StackPanel>
                <CheckBox x:Name="Check1" Content="Check" IsChecked="{Binding ElementName=evm, Path=IsMyActive}"/>
                <ContentControl>
                    <local:EditVM x:Name="evm"/>
                </ContentControl>
            </StackPanel>
        </HeaderedContentControl>

        <HeaderedContentControl Header="Здесь пытаюсь IWillChange привязать к св-ву IsChecked моего CheckBox'а(Ничего не выходит!)">
            <local:VM x:Name="my1" IWillChange="{Binding ElementName=Check1, Path=IsChecked}"/>
        </HeaderedContentControl>
...



Код: c#
1.
2.
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsChecked; DataItem=null; target element is 'EditVM' (HashCode=55303835); target property is 'IsMyActive' (type 'Boolean')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsChecked; DataItem=null; target element is 'VM' (HashCode=52864749); target property is 'IWillChange' (type 'Boolean')
...
Рейтинг: 0 / 0
19.02.2012, 19:35
    #37669439
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
xpoft2010,

на ум приходит лишь одна мысль "ограниченность видимости ContentControl как у DataTemplate" сейчас проверить не смогу, другая ОС, завтра на работе, если получится.
...
Рейтинг: 0 / 0
19.02.2012, 20:38
    #37669479
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
уТКаxpoft2010,

на ум приходит лишь одна мысль "ограниченность видимости ContentControl как у DataTemplate" сейчас проверить не смогу, другая ОС, завтра на работе, если получится.

спасибо, проблема уже решена, действительно ругался из-за того, что не унаследован от FrameworkElement:
вот здесь об этом обсуждение:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/aff23943-5483-40b2-816b-4ce687bc6bf8/

решение оказалось предельно простым и приемлемым:
вот здесь в конце 3 варианта решения этой проблемы, может кому то будет полезным:
http://eladm.wordpress.com/2009/04/08/databinding-tips-tricks/

Я унаследовался от Freezable.
...
Рейтинг: 0 / 0
20.02.2012, 08:35
    #37669815
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
xpoft2010,

все куда проще
...
Рейтинг: 0 / 0
20.02.2012, 10:59
    #37669952
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject?
Да, будет работать в некоторых сценариях, в частности в этом пробном проекте(куда ж денется то! ) ), но в рабочем проекте мне на мои <local:VM и EditVM>(понятное дело, что там они более внятно), нужно вешать визуализацию через DataTemplate при таком подходе придется делать некоторые выкрутасы, чтобы это реализовать. На мой взгляд будет делать разметку менее читаемой.
Спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как связать 2 DependencyProperty определенных в класса напрямую от DependencyObject? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]