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