2016-03-28 4 views
1

RadListBoxのUIに問題があり、チェックボックスの項目をチェックしています。問題は、チェックボックスの選択が、トリガするRADListBox内での選択以来、イベントをトリガしないことです。そして、ユーザは、チェックボックスをチェックして、そのSelectedValueイベントをトリガするために、ラジオリストボックス内の項目を選択(クリック)する必要があります。ユーザーがチェックボックスをチェックすると、RadListBoxのSelectedValueイベントも呼び出されるようにしたいと思います。ここに私のWPFのコードは次のとおりです。 Telerik RADListBox with CheckBox - チェックボックスでチェックボックスをオンにして、RADListBox SelectedValueイベントを呼び出す方法

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

イベントSelectedValueのは、私のクラスのプロパティにバインドされ、それが/セット、私は別のボタンを有効化/無効化しています取得するときに注意してください。私は、ラジオリストボックスのselectedvalueイベントをトリガするためにチェックボックスIsCheckedイベント(ユーザがチェックボックスをオンまたはオフにしたとき)を取得する方法を知らず、基本的に私のユーザが別のget/setプロパティをトリガするチェックボックスをチェック/ ExportFormatName)。このようにして、ユーザはradlistbox内のアイテムを再度選択せずに(チェックボックスの外側をクリックして)、get/setプロパティイベントをトリガすることができます。このWPFの部分で私を助けてください。

私は意図的にCheckBox IsCheckedをメンバのブール値(IsExporterChecked)を保持しているBaseTourSheetExporterTypeというクラスにバインドしています。これは、チェックされているかどうかを判断します(このクラスとメンバーは、ウィンドウを開いたときの変更を覚えておく必要があります)。

+0

私はレイチェルの答えはあなたを助けると思う:ここで私はSelectedValueの呼び出しを強制し、私のRadListBox機能の更新バージョンは、(最後の行に注意してください)です。 http://stackoverflow.com/questions/23295857/c-sharp-wpf-listbox-checkbox-binding-ischecked-to-field-and-isselected –

+0

@AyyappanSubramanianこれは途中で問題を修正しました。私はRachelのコードを使用しました。質問を投稿したユーザーのコードですが、別のものが見つからないのを見ています。私の答えは –

+0

です。バインディングにMode = TwoWayを追加してみてください。また、INotifyPropertyChangedを実装しているかどうかを確認してください。 –

答えて

0

次のコードを追加したと私は私はまだ取得/設定ExportFormatNameプロパティへの呼び出しを取得しない]チェックボックスをオフにするとき、私はしかし、チェックボックスにチェックを入れたときに、私のradlistboxアイテムは、現在選択されます:

<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#でボタンをクリックして:私はそれをオフにするとき

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

私はチェックボックスにチェックを入れたときにExportFormatNameの取得/設定が正しく呼び出されることに注意してください、そのちょうど...助けてください。

+0

Mode = TwoWayをバインディングに追加してみてください。また、INotifyPropertyChangedを実装しているかどうかを確認してください。 –

0

ここで、チェックボックスのonclickイベントを変更して問題を解決しました。

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); 
    } 
関連する問題