2017-02-14 1 views
0

J'ai une liste de classes personnalisées que je les ai liés au RadGridView par le code ci-dessous:liant une propriété à l'colomn en RadGridView dans le code derrière

this.ItemsSource = CorrelationCalibraationGridInput.ListOfCalibratableCorrelationClasses; 

j'ai créé les colonnes manuellement. Pour l'une des colonnes qui est colonne de case à cocher, je dois activer désactiver la liaison de case à cocher à une propriété de classe et définir son état de vérification en fonction d'une autre propriété de la classe. J'ai utilisé le code ci-dessous mais l'enablity ne lie pas à la propriété IsNotCalibratedYet. Pouvez-vous expliquer pourquoi et comment puis-je le résoudre? (Notez que l'état de vérification est correctement lié à la propriété IsCalibratedUSed de la classe).

GridViewDataColumn IsCalibratedUSedColumn = new GridViewDataColumn() 
{ 
    UniqueName = "IsCalibratedUSedColumn", 
    Header = "Use calibrated", 
    DataMemberBinding = new Binding("IsCalibratedUSed"), 
    IsFilterable = false, 
}; 
Binding enablityBinding = new Binding("IsNotCalibratedYet"); 
     enablityBinding.Mode= BindingMode.OneWay; 
     enablityBinding.UpdateSourceTrigger= UpdateSourceTrigger.PropertyChanged; 
     BindingOperations.SetBinding(IsCalibratedUSedColumn, GridViewDataColumn.IsEnabledProperty,enablityBinding); 
     this.Columns.Add(IsCalibratedUSedColumn); 
+0

Où est 'IsNotCalibratedYet' défini? – wkl

Répondre

0

Vous devez définir la propriété IsReadOnlyBinding de le GridViewDataColumn à votre Binding:

GridViewDataColumn IsCalibratedUSedColumn = new GridViewDataColumn() 
{ 
    UniqueName = "IsCalibratedUSedColumn", 
    Header = "Use calibrated", 
    DataMemberBinding = new Binding("IsCalibratedUSed"), 
    IsFilterable = false, 
}; 
Binding enablityBinding = new Binding("IsNotCalibratedYet"); 
enablityBinding.Mode = BindingMode.OneWay; 
enablityBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 

IsCalibratedUSedColumn.IsReadOnlyBinding = enablityBinding; 

this.Columns.Add(IsCalibratedUSedColumn); 

Selon que votre propriété source renvoie true/false vous pouvez utiliser un InvertedBooleanConverter:

Binding enablityBinding = new Binding("IsNotCalibratedYet"); 
enablityBinding.Mode = BindingMode.OneWay; 
enablityBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
enablityBinding.Converter = new InvertedBooleanConverter(); 
+0

S'il vous plaît ne pas oublier de voter des réponses utiles :): http://stackoverflow.com/help/privileges/vote-up – mm8

0

Vous pouvez le faire en utilisant le paramètre suivant:

public MainWindow() 
{ 
    InitializeComponent(); 
    lv.ItemsSource = new Item[3] { new Item() { IsNotCalibratedYet=true }, new Item() { IsNotCalibratedYet = false }, new Item() { IsNotCalibratedYet = true } }; 
    gv.Columns.Add(new GridViewColumn() 
    { 
     DisplayMemberBinding = new Binding("IsNotCalibratedYet"), 
    }); 
} 

dans lequel:

public class Item 
{ 
    public bool IsNotCalibratedYet { get; set; } 
} 

et XAML est

<ListView Name="lv" > 
     <ListView.View> 
      <GridView x:Name="gv" AllowsColumnReorder="true" 
       ColumnHeaderToolTip="Employee Information"> 

      </GridView> 
     </ListView.View> 
    </ListView>