LabelItemFilterusingH.Controls.FilterBox;namespaceH.App.LabelImg;[Display(Name标注)]publicclassLabelItemFilter:FilterBase{publicColorColor{get;set;}public stringValue{get;set;}public override boolIsMatch(object obj){if(objisModelBindablefm_dd_imagefile){returnfile.Model.Labels.Any(xx.LabelNamethis.Value);}returnfalse;}}ProjectFileProjectItem.xamlFileProjectItem.xaml.csFileProjectItemSetting.csFileProjectService.csFileProjectItem.xamlResourceDictionaryxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:bhttp://schemas.microsoft.com/xaml/behaviorsxmlns:hhttps://github.com/HeBianGuxmlns:localclr-namespace:H.App.LabelImgDataTemplateDataType{x:Type local:FileProjectItem}DockPanelImageWidth30Height30Margin5Source{Binding BaseFolder, Converter{h:GetFilePathToSystemInfoIconConverter}}/UniformGridColumns1GridTextBlockText{Binding Title}/TextBlockMargin10,0HorizontalAlignmentRightVerticalAlignmentCenterDockPanel.DockRightText{Binding UpdateTime, Converter{x:Static h:Converter.GetDateTimeToString}}//GridTextBlockFontSize{DynamicResource {x:Static h:FontSizeKeys.Header6}}Foreground{DynamicResource {x:Static h:BrushKeys.ForegroundAssist}}Text{Binding BaseFolder}TextTrimmingCharacterEllipsisToolTip{Binding BaseFolder}//UniformGrid/DockPanel/DataTemplate/ResourceDictionaryFileProjectItem.xaml.csusingH.Common.Interfaces.Where;usingH.Controls.FavoriteBox;usingH.Controls.Form.Attributes;usingH.Controls.Form.PropertyItem.TextPropertyItems;usingH.Controls.TagBox;usingH.DataBases.Share;usingH.Extensions.DataBase;usingH.Extensions.DataBase.Repository;usingH.Modules.Project;usingH.Modules.Project.Base;usingH.Mvvm.ViewModels.Base;usingH.Presenters.Common;usingH.Services.Common;usingH.Services.Setting;usingMicrosoft.EntityFrameworkCore;usingMicrosoft.Extensions.DependencyInjection;usingSystem;usingSystem.Collections.ObjectModel;usingSystem.ComponentModel;usingSystem.ComponentModel.DataAnnotations;usingSystem.IO;usingSystem.Text.Json.Serialization;usingSystem.Xml.Serialization;namespaceH.App.LabelImg;publicclassFileProjectItem:ProjectItemBase{private string _baseFolder;[Required][PropertyItem(typeof(OpenFolderDialogPropertyItem))][Display(Name文件路径,Order5)]public stringBaseFolder{get{return_baseFolder;}set{_baseFoldervalue;RaisePropertyChanged();}}public override stringGetFilePath(){returnSystem.IO.Path.Combine(this.Path,this.Title.db);}[Browsable(false)]publicObservableCollectionTagTags{get;set;}newObservableCollectionTag();privateObservableCollectionLabelItem_LabelsnewObservableCollectionLabelItem();[Browsable(false)]publicObservableCollectionLabelItemLabels{get{return_Labels;}set{_Labelsvalue;RaisePropertyChanged();}}privatevoidLabels_CollectionChanged(object sender,System.Collections.Specialized.NotifyCollectionChangedEventArgse){this.RefreshLabelFilters();}[Browsable(false)]publicObservableCollectionFavoriteItemFavoriteItems{get;set;}newObservableCollectionFavoriteItem();privateIRepositoryBindablefm_dd_image_filenewRepositoryBindablefm_dd_image();[JsonIgnore][XmlIgnore][Browsable(false)]publicIRepositoryBindablefm_dd_imageFile{get{return_file;}set{_filevalue;RaisePropertyChanged();}}public intOrder{get;}public stringGroupName{get;}项目设置;public override boolLoad(out string message){// Do 重新注册仓储和上下文接口DbIoc.ConfigureServices(dx{dx.AddDbContextDataContext(x{IProjectServiceprojectIoc.GetServiceIProjectService();string conproject.Currentnull?$Data Sourcedefault.db:$Data Source{this.GetFilePath()};x.UseLazyLoadingProxies().UseSqlite(con);});dx.AddSingletonIStringRepositoryfm_dd_image,DbContextRepositoryDataContext,fm_dd_image();dx.AddSingletonIRepositoryBindablefm_dd_image,FileRepositoryBindable();});if(!Directory.Exists(System.IO.Path.GetDirectoryName(this.GetFilePath())))Directory.CreateDirectory(System.IO.Path.GetDirectoryName(this.GetFilePath()));// Do 迁移数据DataContextfindDbIoc.Services.GetServiceDataContext();find.Database.Migrate();// Do 刷新数据this.FileDbIoc.GetServiceIRepositoryBindablefm_dd_image();this.File.RefreshData();IocTagService.Instance.Load(out message);IocFavoriteService.Instance.Load(out message);IocSetting.Instance.Add(this.Setting);this.RefreshLabelFilters();returnbase.Load(out message);}public override boolSave(out string message){this.File?.Save();DataContextcontextDbIoc.Services.GetServiceDataContext();context?.SaveChanges();//context?.Dispose();returnbase.Save(out message);}public override boolClose(out string messge){this.Save(out messge);DataContextcontextDbIoc.Services.GetServiceDataContext();context?.Dispose();IocSetting.Instance.Remove(this.Setting);returntrue;}privateFileProjectItemSetting_settingnewFileProjectItemSetting();[Browsable(false)]publicFileProjectItemSettingSetting{get{return_setting;}set{_settingvalue;RaisePropertyChanged();}}public override boolDelete(out string message){// Do 这块需要释放数据库//var r this.Close(out message);//if (r false)// return false;//if (System.IO.File.Exists(this.Path))// File.Delete(this.Path);//if (!string.IsNullOrEmpty(this.Path))//{// var find this.GetFilePath();// if (System.IO.File.Exists(find))// File.Delete(find);//}messagenull;returntrue;}publicIEnumerableIFilterableCreateLabelFilters(){if(IocProject.Instance.CurrentisFileProjectItemprojectItem){foreach(variteminprojectItem.Labels){LabelItemFilterlabelItemFilternewLabelItemFilter();labelItemFilter.Nameitem.LabelName;labelItemFilter.Valueitem.LabelName;labelItemFilter.Coloritem.LabelColor;yieldreturnlabelItemFilter;}}}publicvoidRefreshLabelFilters(){this.LabelFiltersthis.CreateLabelFilters().ToObservable();}privateObservableCollectionIFilterable_LabelFiltersnewObservableCollectionIFilterable();[Browsable(false)][JsonIgnore]publicObservableCollectionIFilterableLabelFilters{get{return_LabelFilters;}set{_LabelFiltersvalue;RaisePropertyChanged();}}}publicclassLabelItem:BindableBase{private string _labelName;[Display(Name标记名称)]public stringLabelName{get{return_labelName;}set{_labelNamevalue;RaisePropertyChanged();}}privateColor_labelColorColors.Chartreuse;[Display(Name标记颜色)]publicColorLabelColor{get{return_labelColor;}set{_labelColorvalue;RaisePropertyChanged();}}}