2015-02-09 3 views
0

У меня есть флажок dev express (MVVM) - редактировать окно списка (с помощью Caliburn Micro), что позволяет использовать множественный выбор, к которому я пытаюсь подключить функцию поиска, он работает как и ожидалось, однако, когда у меня есть выбранные элементы, затем поиск, ранее выбранные элементы теряются. Heres моего XAML:Сохранять выбранные элементы из списка после перерисовки окна

<layout:LayoutItem Label="label : " Foreground="White" LabelPosition="Top"> 
      <DockPanel> 
       <TextBox Text="{Binding Path=SeachItems, UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Top" Width="400"> 
       </TextBox> 

       <dxe:ListBoxEdit DockPanel.Dock="Bottom" Foreground="Black" Margin="10" Width="400" DisplayMember="Name" MaxHeight="200" MinHeight="200" ItemsSource="{Binding Path=Items}" EditValue="{Binding Path=SelectedItems}" SelectionMode="Multiple" > 
        <dxe:ListBoxEdit.StyleSettings> 
         <dxe:CheckedListBoxEditStyleSettings /> 
        </dxe:ListBoxEdit.StyleSettings> 
       </dxe:ListBoxEdit> 
      </DockPanel> 
     </layout:LayoutItem> 

деклараций для списка (я думаю, что это может быть часть моего вопроса, поскольку я не могу найти способ, чтобы связать мой выбор к ObservableCollection, я могу только seemt, чтобы связать их общий список):

public ObservableCollection<Items> Items { get; set; } 
public List<object> SelectedItems { get; set; } 

А вот мой способ поиска:

private string _searchItems; 
public string SeachItems 
    { 
     get { return _searchItems; } 
     set 
     { 
      _searchItems = value; 
      var tempItems = SelectedItems; 
      var items = //fetch all items from collection; 
      Items = (from p in items where p.Name.ToLower().StartsWith(SeachItems.ToLower()) orderby p.Name select p).ToObservableCollection(); 

      NotifyOfPropertyChange(()=>Items); 
      SelectedItems = tempItems; 
      NotifyOfPropertyChange(()=>SelectedItems); 

     } 
    } 

Хотя SelectedItems действительно есть счетчик после вызова NotifyOfPropertyChange(), при просмотре фактического списка ни один элемент не проверяется, а следующий поиск очищает SelectedItems от любых указателей?

Edit:

В настройки модели я Populating Items и создание утра экземпляр SelectedItems

Items = //populate observable collection from database 
SelectedItems = new List<object>(); 
+0

Вы должны использовать представление, чтобы выполнить фильтрацию, а не заменять коллекцию элементов. Также неясно, где ваше объявленное свойство 'Items', но если это свойство' ListBoxEdit', то довольно странно связывать свойство 'Items' объекта с его собственным свойством' ItemsSource'. В коде, который вы опубликовали, много, что наводит на мысль о том, что «делаю это неправильно», но без [хорошего, _minimal_, _complete_ code example] (http://stackoverflow.com/help/mcve), чтобы проиллюстрировать вашу проблему, это не совсем можно предложить конкретные советы. –

+0

@PeterDuniho добавил основной код из моей модели установки, честно говоря, вполне возможно, что я делаю это неправильно, поэтому я написал здесь, чтобы получить помощь. – Typhomism

ответ

0

Вы должны фильтровать элементы с CollectionViewSource. Here - пример. Очень простой:

ICollectionView myCollectionVIew = CollectionViewSource.GetDefaultView(items); 
myCollectionVIew.Filter = p => { return p.Name.ToLower().StartsWith(SeachItems.ToLower(); }; 
0

Вы можете просто связать выбранное значение. Когда вы перерисовываете, значение будет таким же.

<dxe:ListBoxEdit DockPanel.Dock="Bottom" Foreground="Black" Margin="10" 
        Width="400" DisplayMember="Name" MaxHeight="200" MinHeight="200" 
        ItemsSource="{Binding Path=Items}" 
        EditValue="{Binding Path=SelectedItems}" 
        SelectionMode="Multiple" 
        SelectedItem = {"Binding myNewVar"}> 
Смежные вопросы