Биндинг DataContext текущей формы?
От: detox Россия  
Дата: 03.12.10 11:25
Оценка:
Ситуация следующая .

Имеется грид, который берет данные из CollectionViewSource:
ItemsSource="{Binding Source={StaticResource someViewSource}}

При это необходимо для каждой колонки сичтать дополнительное свойство. Для этого я завел специяальное свойство.
Значение хранится в свойстве объекта, объект находится в DataContext формы.

Как мне сослаться на DataContext текущей формы?


Все это выглядет примерно вот так:


<DataGrid  AutoGenerateColumns="False"               
                  ItemsSource="{Binding Source={StaticResource someViewSource}}">
 <DataGrid.Columns>
                <DataGridTextColumn 
               property:Additional.Default="{Binding Source={?? DataContext ??}, Path=AddID}"                    
               Header="Id" Binding="{Binding Path=ObjectID}"/>
   </DataGrid.Columns>
        </DataGrid>



Если бы не грид можно было просто сослаться как

property:Additional.Default="{Binding Path=AddID}"


А что делать в этом случае?
Re: Биндинг DataContext текущей формы?
От: LF  
Дата: 03.12.10 11:34
Оценка:
В корне формы в ресурсах заводите любой объект, например Grid с ключом, например, dcProxy.
Далее там где надо пишите что то вроде Command={Binding DataContext.SomeCmd, Source={StaticResource dcProxy}}
Re: Биндинг DataContext текущей формы?
От: MxMsk Португалия  
Дата: 03.12.10 11:41
Оценка:
Здравствуйте, detox, Вы писали:

D>Как мне сослаться на DataContext текущей формы?

Стоит использовать правильную терминологию. Никаких "форм" в WPF нет. Есть окна.
DataContext — такое же свойство, как и все остальные. Сослаться можно, например так:
property:Additional.Default="{Binding Path=DataContext.AddID,RelativeSource={RelativeSource AncestorType={x:Type Window}}}"


D>А что делать в этом случае?

Непонятно, как один объект сможет предоставить разные значения свойств для разных строк. Мне кажется, тут есть нестыковочка.
Re[2]: Биндинг DataContext текущей формы?
От: detox Россия  
Дата: 03.12.10 11:56
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, detox, Вы писали:


D>>Как мне сослаться на DataContext текущей формы?

MM>Стоит использовать правильную терминологию. Никаких "форм" в WPF нет. Есть окна.
MM>DataContext — такое же свойство, как и все остальные. Сослаться можно, например так:
MM>
property:Additional.Default="{Binding Path=DataContext.AddID,RelativeSource={RelativeSource AncestorType={x:Type Window}}}"


Что то не проканало, а как биндинг узнает, что надо брать текущее окно? Такое чувство, что не хватает что то типа SELF

D>>А что делать в этом случае?

MM>Непонятно, как один объект сможет предоставить разные значения свойств для разных строк. Мне кажется, тут есть нестыковочка.
На это можно не обращать внимание, я не так выразился
Re[3]: Биндинг DataContext текущей формы?
От: MxMsk Португалия  
Дата: 03.12.10 12:02
Оценка:
Здравствуйте, detox, Вы писали:

D>Что то не проканало, а как биндинг узнает, что надо брать текущее окно? Такое чувство, что не хватает что то типа SELF

В приведенном мною Binding-е, он будет брать значение из окна, в котором лежит DataGrid.
Если не подходит, то уточни, что ты подразумеваешь под "текущим окном"?
Re[4]: Биндинг DataContext текущей формы?
От: detox Россия  
Дата: 03.12.10 12:06
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, detox, Вы писали:


D>>Что то не проканало, а как биндинг узнает, что надо брать текущее окно? Такое чувство, что не хватает что то типа SELF

MM>В приведенном мною Binding-е, он будет брать значение из окна, в котором лежит DataGrid.
MM>Если не подходит, то уточни, что ты подразумеваешь под "текущим окном"?

Да да именно так мне нужно текущее окно.
но грид лежит в UserControl, я исправил соответственно биндинг, но это не помогло.
Re[5]: Биндинг DataContext текущей формы?
От: MxMsk Португалия  
Дата: 03.12.10 12:19
Оценка:
Здравствуйте, detox, Вы писали:

D>Да да именно так мне нужно текущее окно.

D>но грид лежит в UserControl, я исправил соответственно биндинг, но это не помогло.
Binding пишет ошибки в окно Output. Погляди что там.
Re[5]: Биндинг DataContext текущей формы?
От: notacat  
Дата: 03.12.10 16:47
Оценка:
D>но грид лежит в UserControl, я исправил соответственно биндинг, но это не помогло.
Можно попробовать окну или UserControl'у присвоить какое-нибудь имя x:Name="...", а в байндинге на него сослаться через ElementName.
Хотя RelativeSource надежнее должен работать. Советую проверить две вещи:
— что у вас на самом деле в DataContext'е находитсяж
— попробовать сначала DataGridTextColumn.Header к вашему свойству прибайндить. Может ошибка не в байндинге, а в "property:Additional.Default"
Re[6]: Биндинг DataContext текущей формы?
От: detox Россия  
Дата: 03.12.10 16:54
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Здравствуйте, detox, Вы писали:


D>>Да да именно так мне нужно текущее окно.

D>>но грид лежит в UserControl, я исправил соответственно биндинг, но это не помогло.
MM>Binding пишет ошибки в окно Output. Погляди что там.


Да вот как раз и не понятно, что он пишет

A 'Binding' cannot be set on the 'SetDefault' property of type 'DataGridComboBoxColumn'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

Причем когда я просто задаю значение все отлично.
Сейчас попробывал не работает даже вот такой вариант:

property:Additional.Default="{Binding Source={x:Static config:Settings.Default}, Path=Prop}"


А вот так отлично работает:

property:Additional.Default="1"
Re[7]: Биндинг DataContext текущей формы?
От: MxMsk Португалия  
Дата: 03.12.10 17:51
Оценка:
Здравствуйте, detox, Вы писали:

D>A 'Binding' cannot be set on the 'SetDefault' property of type 'DataGridComboBoxColumn'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.


D>property:Additional.Default="{Binding Source={x:Static config:Settings.Default}, Path=Prop}"

Что-то я не понял. Так свойство называется Default или SetDefault? Как свойство объявлено в коде?
Re[8]: Биндинг DataContext текущей формы?
От: notacat  
Дата: 03.12.10 18:12
Оценка: +1
MM>Что-то я не понял. Так свойство называется Default или SetDefault? Как свойство объявлено в коде?
скорей всего AttachedProperty неправильно зарегистрировано, что-нибудь типа того, что в ownerType вместо Additional DataGridComboBoxColumn подсунуто.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.