powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding к более глубокому св-ву
7 сообщений из 7, страница 1 из 1
Binding к более глубокому св-ву
    #37241732
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли каким то образом привязаться к св-ву св-ва, ведь значение св-ва само по себе может быть объектом имеющим свои св-ва(извиняюсь за тавтологию :) )

на выходе должно полчиться что то типа вот этого:
Код: plaintext
1.
2.
<TaxtBlock Text="{Binding ElementName=MainWindow, Path=DataContext.MyProperty}"/>


Задача стоит обратится напрямую к DataContext'у, указав имя элемента из которого забирать DataContext, а не работать как описано везде по умолчанию.

ЗЫ: Можно конечно создать объект, который заберет значение из DataContext стандартным способом (не указывая имя объекта), а потом уже привязаться к нему, но на мой взгляд так не правильно.

Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37241909
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вся привязка в WPF осуществляется на основе Binding,
посему рекомендую разобраться с этой темой,
конкретно нужно посмотреть, что такое DependencyProperty \DependencyObject
и реализовать самому \переписать тот участок, где должна быть
привязка на то свойство, которое необходимо
e.g. http://www.11011.net/wpf-binding-properties
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37242179
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bob Dylanвся привязка в WPF осуществляется на основе Binding,
посему рекомендую разобраться с этой темой,
конкретно нужно посмотреть, что такое DependencyProperty \DependencyObject
и реализовать самому \переписать тот участок, где должна быть
привязка на то свойство, которое необходимо
e.g. http://www.11011.net/wpf-binding-properties

я конечно извиняюсь, но вы хоть бы дочитали пост до конца. Похоже на то, что я не имею никакого представления о привязке данных?

я...
Задача стоит обратится напрямую к DataContext'у, указав имя элемента из которого забирать DataContext, а не работать как описано везде по умолчанию.
...


Собственно уже во всем разобрался:

Пример 1:
Задача через Binding обратится к св-ву FirstProperty через св-во Class1 класса MainWindow.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public partial class MainWindow : Window
    {
        public MyClass1 Class1
        {
            get { return (MyClass1)GetValue(Class1Property); }
            set { SetValue(Class1Property, value); }
        }

        // Using a DependencyProperty as the backing store for Class1.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty Class1Property =
            DependencyProperty.Register("Class1", typeof(MyClass1), typeof(MainWindow), new UIPropertyMetadata(null));

        public MainWindow()
        {
            this.Class1 = new MyClass1();

            InitializeComponent();

        }
    }

    public class MyClass1 : DependencyObject
    {

        public int FirstProperty
        {
            get { return (int)GetValue(FirstPropertyProperty); }
            set { SetValue(FirstPropertyProperty, value); }
        }

        // Using a DependencyProperty as the backing store for FirstProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty FirstPropertyProperty =
            DependencyProperty.Register("FirstProperty", typeof(int), typeof(MyClass1), new UIPropertyMetadata(777));

    }


Все оказалось предельно просто:

Код: plaintext
1.
2.
3.
...
<TextBlock Name="textBlock1" Text="{Binding ElementName=MainWindow, Path=Class1.FirstProperty}" />
...


При обращении к св-ву DataContext все немного сложнее, сделал через ValueConverter, не так прозрачно конечно, но работает. Буду очень благодарен, если кто нибудь покажет, как сделать на чистом XAML:

Пример 2:

ValueConverter:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return null;

            return ((CLIENT)((IBindingList)value)[0]).REQUISIT.LEGAL_ADDRESS.REGION.REGION_NAME;
        }
...
вытянуто из моего проекта, но суть должна быть ясна. (+ код тестовый, валидностью не очень то пахнет :) )

и вяжемся на св-во:
Код: plaintext
1.
<TextBox Height="23" Name="txtLegalRegion" Width="120" Text="{Binding ElementName=tabRequisit, Path=DataContext, Converter={StaticResource MyConverter1}}"/>

Все отлично работает.
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37242190
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не понимаю...а чего до конца читать-то нужно было?

то как в примере 1 написано и есть то, о чём я говорил, в приведённой же мною ссылке
описан более сложный вариант ( если стандарное св-во контрола не подерживает баиндинг)
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37242551
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
           if (value == null)
                return null;

            return ((CLIENT)((IBindingList)value)[0]).REQUISIT.LEGAL_ADDRESS.REGION.REGION_NAME;
        }
..
Маразм какой-то. Binding для подобных свойств,если он правильно задан, должен работать без всяких зависимых свойств и конвертеров.
Стоит прислушаться к советам и прочитать хотя бы один букварь.
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37242721
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
           if (value == null)
                return null;

            return ((CLIENT)((IBindingList)value)[0]).REQUISIT.LEGAL_ADDRESS.REGION.REGION_NAME;
        }
..
Маразм какой-то. Binding для подобных свойств,если он правильно задан, должен работать без всяких зависимых свойств и конвертеров.
Стоит прислушаться к советам и прочитать хотя бы один букварь.

Маразм и правда :), открыл для себя <Binding Source=... /> и CollectionViewSource все оказалось проще.
...
Рейтинг: 0 / 0
Binding к более глубокому св-ву
    #37243011
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xpoft2010,

Биндить можно на неограниченную глубину вложенных свойств. Проверено и WPF и Silverlight .
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Binding к более глубокому св-ву
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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