Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Отсутствующий SelectedItem в ListBox

Есть форма. Вот ее содержимое

Вот ее бэкграунд (оно же вьюха)
public partial class MainWindow : Window, INotifyPropertyChanged { Output _selected;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection Col1 { get; set; } public ObservableCollection Col2 { get; set; } public Output Selected { get { return _selected; } set { _selected = value; OnPropertyChanged(nameof(Selected)); } } public MainWindow() { Col1 = new ObservableCollection { new Output {Name="name_1", Sum=1 }, new Output {Name="name_2", Sum=2 }, new Output {Name="name_3", Sum=3 }, new Output {Name="name_4", Sum=4 } };
Col2 = new ObservableCollection { Col1[2], Col1[3], new Output {Name="name_5", Sum=5 }, new Output {Name="name_6", Sum=6 } }; DataContext = this; InitializeComponent(); }
private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) { Selected = null; }
void OnPropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } }
Запускаю, выделяю в левом листе первый айтем. Все норм. Выделяю в левом листе последний айтем (нэйм 4). Соответствующий айтем выделяется и во втором листе. Теперь выделяю во втором листе последний айтем...
Ожидалось, что при этом в левом листе выделение снимется, потому что данного айтема нет в привязанной коллекции. Но выделение остается. Почему?
UPD:
Но самое печальное оказалось даже не в этом, а в том, что при перемещении табом по листам (или мышкой, нажимая на уже выделенные визуально айтемы) свойство Selected не изменяется. Это будет видно, если привязать к нему заголовок окна.
Title="{Binding Selected.Name}"


Ответ

Вроде как при проблемах с биндингом - то он просто игнорируется, т.е. в данном случае не будет изменения селекта в листбоксе, если попытаться указать несуществующий в ItemsSource элемент. Если приведенное автором вопроса поведение листбоксов действительно необходимо, то нужно делать 2 поля Selected, т.е. каждому листбоксу своё, и немного логики в блоках set. например переустановку или обнуление соседнего Select при необходимости (ну и победить зацикливание установки этих полей друг из друга)
По поводу "самого печального" - думаю это просто следствие нарушенного биндинга.

Комментариев нет:

Отправить комментарий