2017-09-11 1 views
0

Im la création d'une zone de liste (contrôle de DevExpress) comme celui-ciDXE: listbox ne pas vérifier les articles

<dxe:ListBoxEdit x:Name="lstBoxFeatures" DisplayMember="Description" ValueMember="FeatureId" SelectionMode="Multiple" 
           ItemsSource="{Binding Path=DataContext.Features, RelativeSource={RelativeSource AncestorType=Window}}" Height="320"          
           EditValue="{Binding Path=DataContext.SelectedFeatures, RelativeSource={RelativeSource AncestorType=Window}}" 
           > 
        <dxe:ListBoxEdit.StyleSettings> 
         <dxe:CheckedListBoxEditStyleSettings />  
        </dxe:ListBoxEdit.StyleSettings>             
       </dxe:ListBoxEdit>   

J'ai vue, je remplirai comme ceci je remplir les valeurs comme celle-ci (utilisent une liste de fonctionnalités)

_CustomerLicense.Features = GetFeatureList(SelectedLicense.Product.ProductId); 
_CustomerLicense.SelectedFeatures =_CustomerLicense.Features.Where(x => FeaturesIds.Contains(x.FeatureId)).ToList(); 

Le processus où je reçois ths liste des fonctionnalités

private List<Feature> GetFeatureList(Project.Common.Domain.ProductEnum ProductID) 
    { 
     var Res = new List<Feature>(); 
     var Features = new LicenseService().GetFeatures(ProductID); 
     Features.ForEach((x)=> { 
      Res.Add(new Feature(x)); 
     }); 
     return Res; 
    } 

La vue i cette façon

public List<Feature> Features 
    { 
     get { return _Features;} 
     set 
     { 
      _Features = value; 
      this.NotifyPropertyChanged("Features"); 
     } 
    }  

    public List<Feature> SelectedFeatures 
    { 
     get { return _SelectedFeatures; } 
     set 
     { 
      _SelectedFeatures = value; 
      NotifyPropertyChanged("SelectedFeatures"); 
     } 
    } 

Quand je lance l'application, il définit les valeurs, la zone de liste est remplie avec tous les reatures dans la liste, mais les fonctions sélectionnées ne sont pas vérifiées. Cordialement

Répondre

1

Essayez déclarant SelectedFeatures comme une liste d'objets (vous aurez besoin de changer _SelectedFeatures aussi):

public List<object> SelectedFeatures 
{ 
    get { return _SelectedFeatures; } 
    set 
    { 
     _SelectedFeatures = value; 
     NotifyPropertyChanged("SelectedFeatures"); 
    } 
} 

et de modifier cette ligne:

_CustomerLicense.SelectedFeatures =_CustomerLicense.Features.Where(x => FeaturesIds.Contains(x.FeatureId)).Cast<object>().ToList(); 
+0

Merci Arthur Cela a fonctionné comme vous l'avez dit, j'ai changé SelectedFeatures en tant qu'objets et cela a fonctionné. Merci beaucoup. –

0

La collection SelectedFeatures doit contenir un sous-ensemble des Feature instances qui se trouvent dans la collection Features. Essayez ceci:

var features = GetFeatureList(SelectedLicense.Product.ProductId); 
_CustomerLicense.Features = features; 

var selectedFeatureIds = _CustomerLicense.Features.Where(x => FeaturesIds.Contains(x.FeatureId)).Select(x => x.FeatureId).ToList(); 
_CustomerLicense.SelectedFeatures = features.Where(x => selectedFeatureIds.Contains(x.FeatureId)).ToList(); 
+0

J'ai essayé sans de la chance, merci mm8. –