У меня есть 2 списка в моем XAML, и оба они являются множественными выборами.Я синхронизировал выбранные элементы списков, используя решение Самуэля Джека .
<ListBox x:Name="lbOrg" HorizontalAlignment="Left" Grid.Column="1" Grid.Row="0"
Margin="15,3,5,3" Width="200" Height="120" ItemsSource="{Binding AvailableOrg}"
LSync:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedOrg}"
SelectionMode="Extended" DisplayMemberPath="OrgShortName"/>
<ListBox x:Name="lbSite" HorizontalAlignment="Left" Grid.Column="3" Grid.Row="0"
Margin="15,3,5,3" Width="200" Height="120" ItemsSource="{Binding AvailableSites}"
LSync:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedSites}"
SelectionMode="Extended" DisplayMemberPath="SiteShortName"/>
lbSite необходимо заполнить в зависимости от значений, выбранных в lbOrg .Итак, чтобы сообщить ViewModel об изменении, выбранном для lbOrg , я обрабатываю событие изменения выбора для списка выбранных элементов для lbOrg и вызываю метод для заполнения значенийдля lbSite .
public void Load()
{
_selectedOrg = new ObservableCollection<object>();
_selectedSites = new ObservableCollection<object>();
_selectedOrg.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(_selectedOrg_CollectionChanged);
}
private void _selectedOrg_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (AvailableSites != null)
AvailableSites.Clear();
if(SelectedOrg != null && SelectedOrg.Count > 0)
{
foreach (object org in SelectedOrg)
{
if (AvailableSites == null || AvailableSites.Count == 0)
AvailableSites = WebClient.getSitesForOrg(((OrganizationModel)org).OrgId);
else
{
ObservableCollection<object> tempSiteList = WebClient.getSitesForOrg(((OrganizationModel)org).OrgId);
foreach (object site in tempSiteList)
{
AvailableSites.Add(site);
}
}
}
}
}
И я определил свойства следующим образом:
public ObservableCollection<object> SelectedOrg
{
get
{
return _selectedOrg;
}
set
{
_selectedOrg = value;
OnPropertyChanged("SelectedOrg");
}
}
public ObservableCollection<object> AvailableSites
{
get
{
return _availableSites;
}
set
{
_availableSites = value;
OnPropertyChanged("AvailableSite");
}
}
Мой ViewModelBase реализует INotifyPropertyChanged. Кроме того,свойства определяются как ObservableCollection, где объект был приведен из отдельных пользовательских классов в обоих свойствах.
Я думаю, это должно было быть легко, но по какой-то странной причине список не получает уведомление о свойствеизменение и, следовательно, без изменений в источнике отражается на представлении.Я связал eventHandler с событием «Изменено выделение» lbOrg в коде, чтобы проверить, обновляется ли Itemssource для lbSite, но не имеет, хотя свойство AvailableSites имело требуемые значения.
Любая помощь здесьбудет принята с благодарностью.