powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DatePicker, SelectedDateProperty, Binding, UpdateSource
4 сообщений из 4, страница 1 из 1
DatePicker, SelectedDateProperty, Binding, UpdateSource
    #38832886
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдаю весь вечер.
Проблема следующая.
Есть DatePicker в DataTemplate, у него зависимое свойство SelectedDate забиндена на свойство в модели с атрибутом:
UpdateSourceTrigger=Explicit
Затем когда нужно, я обхожу всё дерево ContentPresenter'а и ищу в нём для каждого элемента DependencyProperty, затем проверяю на наличие свойства UpdateSourceTrigger равного Explicit, извлекаю BindingExpression и обновляю источник.
Но жопа вся в том, что метод
DependcyObject.GetLocalValueEnumerator(datePicker) возвращает мне набор всего из 5 свойств, в который нефига нет SelectedDate.

Я проверил, сам DatePicker, зависимое свойство SelectedDate там есть, оно регистрируется именно на DatePicker'а и почему я не могу его перебрать просто ума не приложу.

Заметил, что в извлекаемом списке есть DisplayDate, ну думаю, это моё спасение, забиндился на это свойста и борода в том, что пытаясь получить BindingExpression для этого свойства я получаю Null, хотя из SelectedDateProperty я нормально его получаю .

Где грабли?
...
Рейтинг: 0 / 0
DatePicker, SelectedDateProperty, Binding, UpdateSource
    #38832913
guest123456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
DatePicker, SelectedDateProperty, Binding, UpdateSource
    #38833723
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest123456,

пробовал оба метода не работают, самое удивительное, что для свойства
SelectDate="{Binding Date}" Snoop источником определяет не как Local, а ParentTemplate О_о, при этом когда в Snoop я нажимаю Delve Binding Expression источником биндинга для свойства чудесным образом становится Local и тогда всё работает, так как Local нормально перечисляется и Binding сразабатывает... вот такие чудеса. Что делает Snoop со свойство при нажатии на Delve Binding Expression, не понятно. Почему источник выставляется криво, но свойство работает, тоже не понятно....
...
Рейтинг: 0 / 0
DatePicker, SelectedDateProperty, Binding, UpdateSource
    #38833742
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писал как-то получение всех DependencyProperty указанного класса. Предлагается в качестве идеи:
Код: c#
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.
44.
45.
46.
47.
48.
49.
50.
    static class UiTypeHelper
    {
        static readonly ConcurrentDictionary<Tuple<Type, string>, DependencyProperty> KeyToProperty =
            new ConcurrentDictionary<Tuple<Type, string>, DependencyProperty>();

        public static DependencyProperty GetDependencyProperty(Type type, string propertyName)
        {
            return KeyToProperty.GetOrAdd(
                Tuple.Create(type, propertyName),
                key => GetDependencyProperties(key.Item1).FirstOrDefault(p => p.Name == key.Item2)
            );
        }

        public static IEnumerable<DependencyProperty> GetDependencyProperties(Type type)
        {
            return
                from typeItem in EnumerableHelper.GetLinkedList(type, v => v.BaseType)
                from property in GetTypeItemDependencyProperties(typeItem)
                select property;
        }

        static readonly ConcurrentDictionary<Type, DependencyProperty[]> TypeItemToPropertiesArray =
            new ConcurrentDictionary<Type, DependencyProperty[]>();

        static IEnumerable<DependencyProperty> GetTypeItemDependencyProperties(Type typeItem)
        {
            return TypeItemToPropertiesArray.GetOrAdd(
                typeItem,
                key =>
                    key.GetFields(BindingFlags.Public | BindingFlags.Static)
                        .Where(v => v.FieldType == typeof(DependencyProperty))
                        .Select(v => (DependencyProperty)v.GetValue(null))
                        .ToArray()
            );
        }
    }

    public static class EnumerableHelper
    {         
        public static IEnumerable<T> GetLinkedList<T>(T item, Func<T, T> nextItemSelector)
            where T : class
        {
            do
            {
                yield return item;
                item = nextItemSelector(item);
            }
            while (item != null);
        }
    }

...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DatePicker, SelectedDateProperty, Binding, UpdateSource
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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