powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ListBox MVVM вернуть прежний selected item
14 сообщений из 14, страница 1 из 1
ListBox MVVM вернуть прежний selected item
    #37312381
vitali.podobed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня.

Подскажите, есть ListBox
Код: plaintext
1.
2.
3.
4.
<ListBox DisplayMemberPath="Title" ItemsSource="{Binding OrderStatusCollection}"  
                             SelectedItem="{Binding SelectItemStatus, Mode=TwoWay}">
                        
                    </ListBox>

и есть VM

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public Sistema.EntityFramework.Model.General.StatusObject SelectItemStatus
        {
            get
            {
                return _selectItemStatus;
            }
            set
            {
                
                                    if (System.Windows.MessageBox.Show("Внимание статус будет изменен. Продолжить?",
                        "Изменение статуса", System.Windows.MessageBoxButton.OKCancel) ==
                        System.Windows.MessageBoxResult.OK)
                    {
                        _selectItemStatus = value;
                    }
                    
                    OnPropertyChanged("SelectItemStatus");
            }
          
        }
        

и в случае отмены во View после OnPropertyChanged("SelectItemStatus") выделен не текущий элемент, можно ли решить данную ситуацию?
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37313801
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный сценарий, попробуй IsSynchronizedWithCurrentItem = "true"
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37314606
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaСтранный сценарий, попробуй IsSynchronizedWithCurrentItem = "true"Это не то.

vitali.podobed

Чё это? WPF3, WPF4, Silverlight?
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37314736
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitali.podobed,

я считаю, что нужно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
set
            {
                
                                    if (System.Windows.MessageBox.Show("Внимание статус будет изменен. Продолжить?",
                        "Изменение статуса", System.Windows.MessageBoxButton.OKCancel) ==
                        System.Windows.MessageBoxResult.OK)
                    {
                        _selectItemStatus = value;
                    
                        OnPropertyChanged("SelectItemStatus");
                    }
            }
т.е. в вашем случае вы как бы и не меняете само значение статуса, но кидаете событие о том, что статус все же изменен, вне зависимости от того, что нажал пользователь в вашем диалоге.
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315059
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работающий вариант для WPF
Код: plaintext
1.
2.
3.
4.
 <ListBox DisplayMemberPath="Title" ItemsSource="{Binding OrderStatusCollection}"  
                            IsSynchronizedWithCurrentItem="True"
                             SelectedValue="{Binding SelectItemStatus, Mode=TwoWay}">
                    </ListBox>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
set
            {
                     if (System.Windows.MessageBox.Show("Внимание статус будет изменен. Продолжить?",
                        "Изменение статуса", System.Windows.MessageBoxButton.OKCancel) ==
                        System.Windows.MessageBoxResult.OK)
                    {
                        _selectItemStatus = value;
                    }
               
               Action notify = () =>
                {
                   this.OnPropertyChanged("SelectedItem");
                };
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.SystemIdle, notify );
            }


...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315063
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
this.OnPropertyChanged("SelectedItem"); this.OnPropertyChanged("SelectedItemStatus");
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315311
vitali.podobed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

WPF 3
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315501
Урузагзагды
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitali.podobedАлексей К,

WPF 3Видимо в этом причина. В WPF 4 в биндингах добавлена возможность: после передачи значения обратно из контрола в источник, контрол перечитывает значение из источника. В WPF 3 такой возможности нет.
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315506
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Урузагзагдыvitali.podobedАлексей К,

WPF 3Видимо в этом причина. В WPF 4 в биндингах добавлена возможность: после передачи значения обратно из контрола в источник, контрол перечитывает значение из источника. В WPF 3 такой возможности нет.Сори, не под тем клоном зашёл. :-)
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315623
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Урузагзагдыvitali.podobedАлексей К,

WPF 3Видимо в этом причина. В WPF 4 в биндингах добавлена возможность: после передачи значения обратно из контрола в источник, контрол перечитывает значение из источника. В WPF 3 такой возможности нет.

Ничего там не добавлено, тк возможен бесконечный цикл при таком варианте. По этой же причине нет реакции на сообщение об измении свойства. Поэтому пришлось OnPropertyChanged , сделать отложенной операцией с помощью Dispatcher.CurrentDispatcher.BeginInvoke
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37315971
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaНичего там не добавлено, тк возможен бесконечный цикл при таком варианте.Бесконечный цикл возможен при любом TwoWay Binding. Там есть "защита" от бесконечных циклов.

Где-то видел, что мол в WPF 3 такого не было. Добавлено в WPF 4 на случай, если сеттер свойства изменяет значение, как и в случае топикстартера.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public string Value
{
    get { return _value; }
    set 
    { 
         _value = value.ToUpper(); 
         OnPropertyChanged("Value");
    }
}
string _value;

<TextBox Text="{Binding Value}"/>

SeVaПо этой же причине нет реакции на сообщение об измении свойства. Поэтому пришлось OnPropertyChanged , сделать отложенной операцией с помощью Dispatcher.CurrentDispatcher.BeginInvoke Реакции нет, потому что в сеттере свойства MessageBox.Show. С ShowDialog была бы та же история. BeginInvoke как раз и решает эту проблему.
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37316916
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MessageBox ни при чем. Без него такая же картина. Наверное, такое поводение - глюк в wpf4
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37317040
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaНаверное, такое поводение - глюк в wpf4Конечно, если программа не работает - стопудово ошибка в компиляторе.
...
Рейтинг: 0 / 0
ListBox MVVM вернуть прежний selected item
    #37317072
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КSeVaНаверное, такое поводение - глюк в wpf4Конечно, если программа не работает - стопудово ошибка в компиляторе.
КОмпилятор - молодец, но MessageBox на него дурно влияет.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ListBox MVVM вернуть прежний selected item
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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