2016-03-28 17 views
1

Ich habe ein UI-Problem mit RadListBox und überprüfe Elemente in einer Checkbox. Das Problem ist, dass meine Auswahl in der Checkbox kein Ereignis auslöst, da die Auswahl in der RADListBox diese auslöst. Und der Benutzer muss das Kontrollkästchen aktivieren und dann auf das Element in der Radlistenbox klicken (klicken), um das SelectedValue-Ereignis davon auszulösen. Ich möchte es so haben, dass, wenn der Benutzer eine Checkbox aktiviert, das Selectedvalue Ereignis der RadListBox auch aufgerufen wird. Hier ist meine WPF-Code: Telerik RADListBox mit CheckBox - Wie ein Kontrollkästchen in Checkbox ausgelöst wird, um das RADListBox SelectedValue-Ereignis aufzurufen

<telerik:RadListBox Grid.Row="1" x:Name="ExportersList" ItemsSource="{Binding Exporters}" Style="{StaticResource ModalListBoxStyle}" 
      Visibility="{Binding ExportComplete, Converter={StaticResource InverseBoolToVisibilityConverter}}" 
      SelectedValue="{Binding ExportFormatName, Mode=TwoWay}" SelectedValuePath="Name" SelectionMode="Multiple"> 
      <telerik:RadListBox.ItemTemplate> 
       <DataTemplate DataType="{x:Type interfaces:BaseTourSheetExporterType}"> 
        <StackPanel Orientation="Horizontal"> 
         <CheckBox IsChecked="{Binding IsExporterChecked}" /> 
         <TextBlock Text="{Binding Name}" Margin="5" /> 
        </StackPanel> 
       </DataTemplate> 
      </telerik:RadListBox.ItemTemplate> 
     </telerik:RadListBox> 

Bitte beachten Sie, dass das Ereignis SelectedValue auf eine Eigenschaft in meiner Klasse gebunden ist, und wenn es geht/Sets Ich Aktivierung/Deaktivierung eine andere Taste. Ich weiß nicht, wie ich mein Checkbox IsChecked-Ereignis bekomme (wenn ein Benutzer das Kontrollkästchen aktiviert oder deaktiviert), um das selectedvalue-Ereignis der Radlistbox auszulösen und meinen Benutzer im Grunde nur ein Kontrollkästchen zu aktivieren/deaktivieren, das eine andere get/set-Eigenschaft auslöst (ExportFormatName). Auf diese Weise kann der Benutzer dies tun, ohne das Element erneut in der Radlistenbox auszuwählen (indem außerhalb des Kontrollkästchens geklickt wird), um das get/set -Eigenschaftsereignis auszulösen. Bitte helfen Sie mir mit diesem WPF-Teil.

Nur nebenbei bemerkt bin ich absichtlich die CheckBox IsChecked zu einer Klasse namens BaseTourSheetExporterType, die einen Mitglied Booleschen Wert (IsExporterChecked) enthält. Dies bestimmt, ob es überprüft wurde oder nicht (diese Klasse und mein Member müssen sich meine Änderungen merken, wenn ich das Fenster wieder öffne). noch bekomme ich einen Anruf nicht an der Get/Set ExportFormatName Eigenschaft

+0

Ich denke, Rachel Antwort wird Ihnen helfen. http://stackoverflow.com/questions/23295857/c-sharp-wpf-listbox-checkbox-binding-ische-to-a-field-and-isselected –

+0

@AyyappanSubramanian Dies hat Teil behoben das Problem, ich habe Rachels Code und der Code von dem Benutzer, der die Frage gepostet hat, aber ich sehe eine andere fehlende Sache ... bitte sehen Sie meine Antwort –

+0

Versuchen Sie, Mode = TwoWay zur Bindung hinzuzufügen. Überprüfen Sie auch, ob Sie INotifyPropertyChanged implementiert haben. –

Antwort

0

wurde der folgende Code hinzugefügt und mein radlistbox Artikel wird nun ausgewählt, wenn ich das Kontrollkästchen jedoch überprüfen, wenn ich das Kontrollkästchen deaktivieren:

<telerik:RadListBox Grid.Row="1" x:Name="ExportersList" ItemsSource="{Binding Exporters}" Style="{StaticResource ModalListBoxStyle}" 
    Visibility="{Binding ExportComplete, Converter={StaticResource InverseBoolToVisibilityConverter}}" 
    SelectedValue="{Binding ExportFormatName, Mode=TwoWay}" SelectedValuePath="Name" SelectionMode="Single"> 
    <telerik:RadListBox.ItemTemplate> 
     <DataTemplate DataType="{x:Type interfaces:BaseTourSheetExporterType}"> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox IsChecked="{Binding IsExporterChecked}" Click="ButtonBase_OnClick"/> 
       <TextBlock Text="{Binding Name}" Margin="5" /> 
      </StackPanel> 
     </DataTemplate> 
    </telerik:RadListBox.ItemTemplate> 
</telerik:RadListBox> 

Button Klicken sie in C#:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
{ 
    var cb = sender as CheckBox; 
    var item = cb.DataContext; 
    ExportersList.SelectedItem = item; 
} 

Bitte beachten sie, dass die Get/Set von ExportFormatName richtig aufgerufen wird, wenn ich die Checkbox, es ist nur, wenn ich es deaktivieren ... bitte helfen.

+0

Versuchen Sie, Mode = TwoWay zur Bindung hinzuzufügen. Überprüfen Sie auch, ob Sie INotifyPropertyChanged implementiert haben. –

0

Ich habe das Problem jetzt gelöst, indem ich das onclick-Ereignis des Kontrollkästchens geändert habe. Hier ist die aktualisierte Version der Funktion (bitte beachten Sie die letzte Zeile), wo ich einen Aufruf an selectedvalue und meine RadListBox erzwinge:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     var cb = sender as CheckBox; 
     if (cb == null) 
     { 
      return; 
     } 

     var item = cb.DataContext; 
     this.ExportersList.SelectedItem = item; 
     this.ExportersList.SelectedValue = this.ExportersList.SelectedItem.GetType().GetProperty("Name").GetValue(this.ExportersList.SelectedItem, null); 
    }