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

Подскажите, есть 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
18.06.2011, 09:49
    #37313801
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
Странный сценарий, попробуй IsSynchronizedWithCurrentItem = "true"
...
Рейтинг: 0 / 0
19.06.2011, 12:42
    #37314606
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
SeVaСтранный сценарий, попробуй IsSynchronizedWithCurrentItem = "true"Это не то.

vitali.podobed

Чё это? WPF3, WPF4, Silverlight?
...
Рейтинг: 0 / 0
19.06.2011, 15:39
    #37314736
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
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
19.06.2011, 21:57
    #37315059
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
Работающий вариант для 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
19.06.2011, 22:00
    #37315063
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
this.OnPropertyChanged("SelectedItem"); this.OnPropertyChanged("SelectedItemStatus");
...
Рейтинг: 0 / 0
20.06.2011, 09:22
    #37315311
vitali.podobed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
Алексей К,

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

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

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

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

Ничего там не добавлено, тк возможен бесконечный цикл при таком варианте. По этой же причине нет реакции на сообщение об измении свойства. Поэтому пришлось OnPropertyChanged , сделать отложенной операцией с помощью Dispatcher.CurrentDispatcher.BeginInvoke
...
Рейтинг: 0 / 0
20.06.2011, 14:57
    #37315971
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
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
20.06.2011, 23:12
    #37316916
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
MessageBox ни при чем. Без него такая же картина. Наверное, такое поводение - глюк в wpf4
...
Рейтинг: 0 / 0
21.06.2011, 05:42
    #37317040
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
SeVaНаверное, такое поводение - глюк в wpf4Конечно, если программа не работает - стопудово ошибка в компиляторе.
...
Рейтинг: 0 / 0
21.06.2011, 07:53
    #37317072
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ListBox MVVM вернуть прежний selected item
Алексей КSeVaНаверное, такое поводение - глюк в wpf4Конечно, если программа не работает - стопудово ошибка в компиляторе.
КОмпилятор - молодец, но MessageBox на него дурно влияет.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / ListBox MVVM вернуть прежний selected item / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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