2016-03-28 12 views
1

RadListBox ile bir UI sorunu yaşıyorum ve bir Onay Kutusundaki öğeleri kontrol ediyorum. Sorun, onay kutusundaki seçimimin, onu tetikleyen RADListBox'taki seçiminden bu yana bir olayı tetiklememesidir. Ve kullanıcının Checkbox'ı kontrol etmesi ve ardından SelectedValue olayını tetiklemek için radlistbox'taki öğeyi seçmesi gerekiyor. Kullanıcıya bir onay kutusunu işaretlediğinde, RadListBox’un Selectedvalue olayının da çağrılmasını istiyorum. CheckBox ile Telerik RADListBox - Onaylanmış bir öğeyi RADListBox SelectedValue olayını çağırmak için nasıl işaretlenir

<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> 

olay SelectedValue Sınıfımdaki bir özelliğine bağlı olduğuna dikkat ve aldığında/I sağlayan am setleri/başka düğme sakatlar edin: İşte benim WPF kodudur. Checkbox IsChecked etkinliğimi (bir kullanıcı onay kutusunu işaretlediğinde veya işaretlediğinde) nasıl seçeceğimi bilmiyorum ve temelde kullanıcının bir başka get/set özelliğini tetikleyen bir Checkbox onay kutusunu işaretlemesini/işaretini kaldırmasını sağladım. ExportFormatName). Böylelikle kullanıcı, get/set özellik etkinliğini tetiklemek için radlistbox'ta (onay kutusunun dışına tıklayarak) tekrar öğeyi seçmeden yapabilir. Lütfen bu WPF parçası ile bana yardımcı olun.

Bunun dışında, CheckBox IsChecked öğesini bir üye Boole değeri (IsExporterChecked) olan BaseTourSheetExporterType adlı bir sınıfa bağladım. Bu, kontrol edilip edilmediğini belirler (pencereyi yeniden açtığımda bu sınıf ve üyelerdeki değişiklikleri hatırlamak için gereklidir).

+0

Bence cevap size yardımcı olacaktır. http://stackoverflow.com/questions/23295857/c-sharp-wpf-listbox-checkbox-binding-ischecked-to-a-field-and-isselected –

+0

@AyyappanSubramanian Bu sorunu çözdünüz, Rachel'ın kodunu kullandım ve soruyu gönderen kullanıcıdan gelen kod ama ben başka bir şey eksik görüyorum ... lütfen cevabımı gör –

+0

Bağlanmaya Mode = TwoWay eklemeyi deneyin. Ayrıca INotifyPropertyChanged'i uygulayıp uygulamadığınızı kontrol edin. –

cevap

0

Aşağıdaki kod eklendi ve ben onay kutusunun işaretini kaldırın zaman ancak hala Get/Set ExportFormatName özelliğine bir çağrı alamadım onay kutusunu kontrol ederken benim radlistbox öğesi artık seçilen alır:

<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> 

C# Düğme tıklayın: Ben işaretini kaldırın zaman

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

ben onay kutusunu kontrol ederken ExportFormatName ait Get/Set düzgün çağrılan lütfen unutmayın onun sadece ... yardım edin.

+0

Bağlanmaya Mode = TwoWay eklemeyi deneyin. Ayrıca INotifyPropertyChanged'i uygulayıp uygulamadığınızı kontrol edin. –

0

Şimdi onay kutusunun onclick olayını değiştirerek sorunu çözdüm. Burada fonksiyonun güncellenmiş versiyonu (lütfen son satırı belirtin) ve burada bir değer için seçili değere ve benim RadListBox'ım:

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); 
    } 
İlgili konular