Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Пример привязки ListBox из MSDN  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Вот здесь показан пример привязки трёх ListBox https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/data/how-to-use-the-master-detail-pattern-with-hierarchical-data#example
<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:src="clr-namespace:SDKSample"
  Width="400" Height="180"
  Title="Master-Detail Binding" 
  Background="Silver">
  <Window.Resources>
    <src:LeagueList x:Key="MyList"/>

<DockPanel DataContext="{Binding Source={StaticResource MyList}}">
    <StackPanel>
      <Label>My Soccer Leagues</Label>
      <ListBox ItemsSource="{Binding}" DisplayMemberPath="Name"
               IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>

    <StackPanel>
      <Label Content="{Binding Path=Name}"/>
      <ListBox ItemsSource="{Binding Path=Divisions}" DisplayMemberPath="Name"
               IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>

    <StackPanel>
      <Label Content="{Binding Path=Divisions/Name}"/>
      <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Path=Divisions/Teams}"/>
    </StackPanel>
  </DockPanel>
</Window>
К сожалению, в примере нет больше ни чего.
Мне не понятно как они отслеживают в зависимых ListBox изменения выделенного и текущего элемента в предыдущем. Ведь привязки к SelectedItem или CurrentItem нигде не указано.
3 дек 18, 16:11    [21752202]     Ответить | Цитировать Сообщить модератору
 Re: Пример привязки ListBox из MSDN  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
IsSynchronizedWithCurrentItem="true"

Синхронизация происходит через представление коллекции, у неё есть свойство CurrentItem (элемент который выбран в данный момент в ListBox)
Вы можете получить представление по умолчанию с помощью метода CollectionViewSource.GetDefaultView(object).
В качестве аргумента нужно передавать коллекцию, которые вы биндите к ItemsSource
Получите ICollectionView тип, в нём и будет свойство и события, связанные с изменением CurrentItem.
Так как дефолтное представление может быть для 2 элементов управления общим, имеет смысл создать свое (ListCollectionView) и забиндить его к ItemsSource свойству у ListBox. Тогда будет использованно именно оно.
Вся остальная логика по обновлению элементов в связанных списках перекладывается на модель представления через событие:

event CurrentChangingEventHandler CurrentChanging;

Удачи :)
3 дек 18, 16:43    [21752236]     Ответить | Цитировать Сообщить модератору
 Re: Пример привязки ListBox из MSDN  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
IList sourceList = new List<string>();
// Вариант 1
ICollectionView viewList1 = new ListCollectionView(sourceList);
viewList1.CurrentChanged += (s, e) => { /* Тут вы реализуете логику загрзуки связанные элементов */ };
viewList1.CurrentChanging += (s, e) => { /* Тут вы реализуете логику отмены выбора текущего элемента */ };
// Вариант 2
ICollectionView viewList2 = CollectionViewSource.GetDefaultView(sourceList);
viewList2.CurrentChanged += (s, e) => { /* Тут вы реализуете логику загрзуки связанные элементов */ };
viewList2.CurrentChanging += (s, e) => { /* Тут вы реализуете логику отмены выбора текущего элемента */ };
3 дек 18, 16:50    [21752250]     Ответить | Цитировать Сообщить модератору
 Re: Пример привязки ListBox из MSDN  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
IsSynchronizedWithCurrentItem="true"

Синхронизация происходит через представление коллекции, у неё есть свойство CurrentItem (элемент который выбран в данный момент в ListBox)
Вы можете получить представление по умолчанию с помощью метода CollectionViewSource.GetDefaultView(object).
В качестве аргумента нужно передавать коллекцию, которые вы биндите к ItemsSource
Получите ICollectionView тип, в нём и будет свойство и события, связанные с изменением CurrentItem.
Так как дефолтное представление может быть для 2 элементов управления общим, имеет смысл создать свое (ListCollectionView) и забиндить его к ItemsSource свойству у ListBox. Тогда будет использованно именно оно.
Вся остальная логика по обновлению элементов в связанных списках перекладывается на модель представления через событие:

event CurrentChangingEventHandler CurrentChanging;

Удачи :)
Спасибо!
3 дек 18, 16:54    [21752255]     Ответить | Цитировать Сообщить модератору
 Re: Пример привязки ListBox из MSDN  [new]
vb_sub
Member

Откуда:
Сообщений: 495
Roman Mejtes,
в чем смысл работать именно с ICollectionView, когда можно прибиндить свойство SelectedItem от ListBox и в setter'е отслеживать его изменения, фильтруя соответственно значения других листбоксов?
4 дек 18, 09:44    [21752616]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить