我有一个开发快递(MVVM)复选框 - 列表框编辑(使用Caliburn Micro),它允许我尝试附加搜索功能的多个选项,它正在按预期工作,但是当我选择了项目时,然后搜索,之前选择的项目将丢失。继承我的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
的方法,我似乎只能将它们绑定到通用列表):
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
任何指针吗?
编辑:
在设置模型中,我填充Items
并创建SelectedItems
的实例
Items = //populate observable collection from database
SelectedItems = new List<object>();
答案 0 :(得分:0)
您应该使用CollectionViewSource过滤项目。 Here就是一个例子。 非常基本:
ICollectionView myCollectionVIew = CollectionViewSource.GetDefaultView(items);
myCollectionVIew.Filter = p => { return p.Name.ToLower().StartsWith(SeachItems.ToLower(); };
答案 1 :(得分: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"}>