powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / refrash binding TextBox'a
20 сообщений из 20, страница 1 из 1
refrash binding TextBox'a
    #38243866
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пара отрывков из кода:
Код: xml
1.
2.
3.
4.
<TextBox Text="{Binding Street}" TextOptions.TextFormattingMode="Display" Name="textBoxStreet" Width="139"  Margin="166,187,0,12" HorizontalAlignment="Left" />
        <TextBox Text="{Binding NumHome}" TextOptions.TextFormattingMode="Display" Name="textBoxHome" Width="120" Margin="309,187,316,12" />

<Button Content="Поиск..." TextOptions.TextFormattingMode="Display" Name="button1" Command="{Binding FindCommand}" Margin="476,187,176,12" />


биндинг текстбоксов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        public string Street
        {
            set
            {
                m_adr.Street = value;
                NotifyPropertyChanged(() => this.m_adr);
            }
        }

        public string NumHome
        {
            set
            {
                m_adr.NumHome = value;
                NotifyPropertyChanged(() => this.m_adr);
            }
        }



Не буду вдаваться в бизнес логику. Просто спрошу..
Как при нажатии на кнопку сделать так, чтобы всегда данные с текстбокса считывались в сеттер ?
у меня происходит так:
заполнил текстбоксы, нажал кнопку, данные считались. Второй раз нажимаю - фигушки. не заходит. в отладчике смотрел!!!
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244471
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmann,

Если честно, мне тоже интересно, почему у вас сеттер только раз отрабатывает.
Но у вас нет воспроизводимого сэмпла, а ковыряться в чужом неполном коде никто не будет - кто знает что вы там ещё нагородили.

Вот это что у вас?
Код: c#
1.
                NotifyPropertyChanged(() => this.m_adr);


Судя по имени, вы поле пытаетесь обновить.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244690
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticВот это что у вас?
Это трюк типа вот такого . Достаточно удобная штука, позволяющая на compile-time контролировать корректность вызова PropertyChanged.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244693
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticВот это что у вас?
Это трюк типа вот такого . Достаточно удобная штука, позволяющая на compile-time контролировать корректность вызова PropertyChanged.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244706
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
btw, чтобы данные всегда и сразу попадали в сеттер - в биндинге помимо Path указать
Код: c#
1.
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244710
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Я не про NotifyPropertyChanged через лямбду, а про то, что ТС нотифицирует об обновлении поля (судя по названию m_adr), а не свойства класса.
А что касаемо UpdateSourceTrigger, то он как минимум по потере фокуса срабатывает, поэтому не в нем дело. А работает он гарантировано, судя по тому что ТС написал "нажал кнопку, данные считались".
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244711
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244718
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может и не совсем оно. В любом случае, если данные не изменились, биндинг не будет передавать их из контрола в источник. Но это можно сделать самостоятельно:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        public static void UpdateTextBoxSource(TextBox textBox)
        {            
            var textBinding = BindingOperations.GetBindingExpression(textBox, TextBox.TextProperty);
            if (textBinding != null)
            {
                textBinding.UpdateSource();
                textBox.SelectAll();
            }
        }
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244722
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticА что касаемо UpdateSourceTrigger, то он как минимум по потере фокуса срабатывает
Да ну? Интересно, как же он у меня срабатывает при любом изменении в контроле и без потери фокуса?
Ну, а если в контроле не было никаких изменений - то с чего здесь срабатывать биндингу? Как написано выше - только дергать вручную UpdateSource.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244749
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныbtw, чтобы данные всегда и сразу попадали в сеттер - в биндинге помимо Path указать
Код: c#
1.
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged


есть такое. всё равно. в сеттер попадает только после редактирования. то есть нажмёшь пробел, удалишь - всё! значение передано.
Но это не удобно )
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244755
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://msdn.microsoft.com/ru-ru/library/system.windows.data.binding.updatesourcetrigger.aspx
короче. Я так понял, что в mvvm всё может делаться в ксамле. Оказывается, не может.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244766
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныenigmaticА что касаемо UpdateSourceTrigger, то он как минимум по потере фокуса срабатывает
Да ну? Интересно, как же он у меня срабатывает при любом изменении в контроле и без потери фокуса?Я к тому, что если не указывать значение UpdateSourceTrigger, то он будет как минимум в значении LostFocus.
Этого достаточно, если значение в текстбоксе меняется, поскольку после изменения значения в текстбоксе (но пока не в привязанном свойстве) обязательно будет LostFocus при нажатии на кнопку, и отработает сеттер, который уже положит значение в привязанное свойство.
Сон Веры ПавловныНу, а если в контроле не было никаких изменений - то с чего здесь срабатывать биндингу? Как написано выше - только дергать вручную UpdateSource.А вот это да.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244774
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannЯ так понял, что в mvvm всё может делаться в ксамле. Оказывается, не может.Есть ситуации, где нам нужны sender/eventargs в обработчике, потому что без них никак не обойтись, а через команды без приседаний эти данные не передать.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244783
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannЯ так понял, что в mvvm всё может делаться в ксамле. Оказывается, не может.Чудо никто не обещал.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244788
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticErik_KartmannЯ так понял, что в mvvm всё может делаться в ксамле. Оказывается, не может.Есть ситуации, где нам нужны sender/eventargs в обработчике, потому что без них никак не обойтись, а через команды без приседаний эти данные не передать.RoutedEventArgs содержит sender. А способов без приседаний передать EventArgs в Command хватает. Но и codebehind никто не запрещал. Всё зависит от потребностей.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244792
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmannесть такое. всё равно. в сеттер попадает только после редактирования. то есть нажмёшь пробел, удалишь - всё! значение передано.
Но это не удобно )"Кто на ком стоял?" (с)

YouTube Video
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244795
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА способов без приседаний передать EventArgs в Command хватает.Просветите :)
Я как-то пользовался EventToCommand с PassEventArgsToCommand, но он не предназначен для передачи sender. А других способов передать аргументы обработчика в команду я не нашел.
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244802
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticАлексей КА способов без приседаний передать EventArgs в Command хватает.Просветите :)
Я как-то пользовался EventToCommand с PassEventArgsToCommand, но он не предназначен для передачи sender. А других способов передать аргументы обработчика в команду я не нашел.Пользуюсь этим:
Код: 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.
    public class CommandTriggerAction : TriggerAction<UIElement>
    {
        #region Command Property

        public static readonly DependencyProperty CommandProperty =
            DependencyProperty.Register(
                "Command",
                typeof(ICommand),
                typeof(CommandTriggerAction)
            );

        public ICommand Command
        {
            get { return (ICommand)GetValue(CommandProperty); }
            set { SetValue(CommandProperty, value); }
        }

        #endregion

        #region CommandParameter Property

        public static readonly DependencyProperty CommandParameterProperty =
            DependencyProperty.Register(
                "CommandParameter",
                typeof(object),
                typeof(CommandTriggerAction)
            );

        public object CommandParameter
        {
            get { return (object)GetValue(CommandParameterProperty); }
            set { SetValue(CommandParameterProperty, value); }
        }

        #endregion

        protected override void Invoke(object parameter)
        {
            if (Command != null)
                Command.TryExecuteEx(CommandParameter ?? parameter);
        }
    }

Повторюсь, если это маршрутизируемое событие, то sender есть в RoutedEventArgs (свойства Source и OriginalSource).
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244820
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

А в случае сильверлайта этот вариант прокатит?
В любом случае, как-нибудь попробую использовать. Спасибо :)
...
Рейтинг: 0 / 0
refrash binding TextBox'a
    #38244824
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmaticА в случае сильверлайта этот вариант прокатит?Думаю, да. Версия Expression Blend SDK под SL вроде как есть.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / refrash binding TextBox'a
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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