Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
1

Не работает Binding для DependencyProperty

06.12.2012, 17:34. Показов 2022. Ответов 1

Author24 — интернет-сервис помощи студентам
Вот тут не работает привязка:
XML
1
<da:MyShort Value="{Binding Path=subId}" />
C#
1
2
3
4
5
6
7
8
9
10
    public class MyShort : FrameworkElement
    {
        public static DependencyProperty MyParametr =
            DependencyProperty.Register("Value", typeof(Int16), typeof(MyShort), new FrameworkPropertyMetadata(1));
        public short Value
        {
            get { return (short)GetValue(MyParametr); }
            set { SetValue(MyParametr, value); }
        }
    }
более полный код:

XML
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
37
38
39
40
41
42
43
<Window> 
  <Window.Resources>
        <ObjectDataProvider x:Key="DataProvider" ObjectType="{x:Type da:MyDataSet}" />
        <ObjectDataProvider x:Key="MyData" ObjectInstance="{StaticResource DataProvider}" MethodName="GetData"/>
    </Window.Resources>
    <DockPanel Background="Aqua" VerticalAlignment="Stretch">
        <DataGrid x:Name="lb" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HeadersVisibility="None" AutoGenerateColumns="False" CanUserAddRows="False" 
ItemsSource="{Binding Source={StaticResource ResourceKey=MyData}}">
            <DataGrid.Columns>
                <DataGridTemplateColumn Width="*">
                    <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid HorizontalAlignment="Stretch">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="250"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
 <StackPanel  Grid.Column="0">
<!-- Данные из MyData -->
                            </StackPanel>
                            <StackPanel  Grid.Column="1">
   <!-- Тут данные из дочерней таблицы -->
                                 <StackPanel.Resources>
                                        <ObjectDataProvider x:Key="subData" ObjectInstance="{StaticResource DataProvider}" MethodName="GetSubData">
                                            <ObjectDataProvider.MethodParameters>
                                                <da:MyShort Value="{Binding Path=subId}" />                                                   
                                            </ObjectDataProvider.MethodParameters>
                                        </ObjectDataProvider>
                                    </StackPanel.Resources>
                                    <TextBlock Text="{Binding Path=subId}"></TextBlock>
                                    <Border BorderThickness="1" BorderBrush="Black" Background="CadetBlue">
                                        <DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Source={StaticResource ResourceKey=subData}}"></DataGrid>
                                </Border>
                            </StackPanel>
                        </Grid>
                    </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
 
    </DockPanel>
</Window>


В результате данные из дочерней таблицы отображаются верно, только параметр MyShort имеет значение по умолчанию и не получает данные по привязке! (видно при отладке в методе GetSubData)

В то же время привязка в TextBlock работает корректно и верно отображает данные, то есть в источнике данных проблем нет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2012, 17:34
Ответы с готовыми решениями:

DependencyProperty + Binding в WPF
Здравствуйте. Решил попробовать поработать со свойствами зависимостей и наткнулся на ткую штуку...

"Binding" можно задать только в параметре DependencyProperty объекта DependencyObject."
Всем привет как можно обойти это исключение пытаюсь привязать CredentialsProvider он в находится в...

Не работает биндинг к DependencyProperty моего UserControl
Есть колхозный слайдер с 2-мя ползунками &lt;UserControl x:Class=&quot;RealEstateAgency.RangeSliderBar&quot;...

Не работает UpdateSourceTrigger=OnPropertyChanged у TextBox с привязкой к DependencyProperty
Всем здравствуйте! Столкнулся с проблемой, никак не могу решить, и не могу понять даже, в чем...

1
145 / 129 / 27
Регистрация: 20.12.2010
Сообщений: 242
11.12.2012, 13:48 2
Описание зависимого свойства должно следовать следующему шаблону:
C#
1
2
3
4
5
6
7
8
public static readonly DependencyProperty propertyNameProperty =
            DependencyProperty.Register("propertyName", typeof (propertyType), typeof (твой класс), new PropertyMetadata(default(propertyType)));
 
        public propertyType propertyName
        {
            get { return (propertyType) GetValue(propertyNameProperty); }
            set { SetValue(propertyNameProperty, value); }
        }
В твоем случае
C#
1
2
3
4
public static DependencyProperty MyParametr =
 
get { return (short)GetValue(MyParametr); }
set { SetValue(MyParametr, value); }
должно быть
C#
1
2
3
4
public static DependencyProperty ValueProperty=
 
get { return (short)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
И рекомендуется не использовать в именах зависимых свойств Value, Name, Property и им подобным.
0
11.12.2012, 13:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2012, 13:48
Помогаю со студенческими работами здесь

Не работает свяка моего DependencyProperty со свойством другого объекта
Создаю UserControl c DependencyProperty &quot;CurrentNumber&quot; &lt;UserControl...

DependencyProperty для ItemsControl
В одном из предыдущих постов Элд Хасп посоветовал переделать INPC на DP. У меня было: ...

TextBox. Binding отлично работает, если создается в code behind, но не работает, будучи описанным в XAML
Window1 : Window { private TestObject _testObj = new TestObject(); public Window1(){ ...

Не работает Binding
Рассмотрим такую ситуацию. Допустим. Разметка xaml: &lt;Grid x:Name=&quot;LayoutRoot&quot;&gt; &lt;Chart...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru