Страницы

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

четверг, 2 января 2020 г.

binding коллекции к listbox в xaml

#c_sharp #wpf #binding


У меня есть коллекция public ObservableCollection MyCollection
у класса MyClass есть интовое свойство.

Так же есть листбокс, который я хочу заполнить объектами этой коллекции, при нажатии
на каждый элемент в текстбоксе должно высвечиваться свойство выбранного элемента, но
писать listBox1.DataSource/ItemsSource = ... - нельзя, надо делать биндинг только в
xaml'e и я никак не разберусь, как это реализовать. коллекция заполнена и инициализирована
    


Ответы

Ответ 1



Нужно завести свойство выбранного элемента в коллекции (Не забудьте о реализации INotifyPropertyChanged): public MyClass SelectedItem {get; set; } Далее в xaml делаете привязку к этому свойству: UPDATE Приведу код целиком: // модель представления элемента коллекции public sealed class CollectionItemVm : BaseVm { public int IntProperty { get { return _intProperty; } set { SetProperty(ref _intProperty, value); } } private int _intProperty; } // модель представления главного окна public sealed class MainVm : BaseVm { public ObservableCollection MyCollection { get { return _myCollection ?? (_myCollection = new ObservableCollection()); } } private ObservableCollection _myCollection; public CollectionItemVm SelectedItem { get { return _selectedItem; } set { SetProperty(ref _selectedItem, value); } } private CollectionItemVm _selectedItem; public MainVm() { MyCollection.Add(new CollectionItemVm { IntProperty = 1 }); MyCollection.Add(new CollectionItemVm { IntProperty = 2 }); SelectedItem = MyCollection.Last(); } } // представление главного окна BaseVm реализация INotifyPropertyChanged. WpfApplication4.ViewModels - пространство имен, в котором расположен класс MainVm.

Ответ 2



Всё просто. Трюк в том, что у коллекции* есть понятие текущего элемента. Для того, чтобы при выделении этот текущий элемент обновлялся, нужно IsSynchronizedWithCurrentItem="True". Вы можете в Binding'е сослаться на текущий элемент используя /. Length — то самое интовое свойство. *На самом деле, не у коллекции, а у CollectionView, который неявно «надевается» на коллекцию, когда к ней происходит Binding.

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

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