带CheckBox的Telerik RADListBox - 如何触发复选框中的已检查项目以调用其RADListBox SelectedValue事件

时间:2016-03-28 21:17:07

标签: c# wpf checkbox selectedvalue telerik-radlistbox

我遇到了RadListBox的UI问题并检查了Checkbox中的项目。问题是我在复选框中的选择不会触发事件,因为它在RADListBox中的选择触发了它。用户需要检查复选框,然后选择(单击)radlistbox中的项目以触发它的SelectedValue事件。我想拥有它,以便当用户检查复选框时,也会调用RadListBox的Selectedvalue事件。这是我的WPF代码:

<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绑定到我的类中的属性,当它获取/设置时,我启用/禁用另一个按钮。我不知道如何获取我的Checkbox IsChecked事件(当用户选中或取消选中复选框时)以触发radlistbox的selectedvalue事件,并且基本上允许我的用户只检查/取消选中触发另一个get / set的Checkbox property(ExportFormatName)。因此,用户可以这样做而无需在radlistbox中再次选择项目(单击复选框外部)以触发get / set属性事件。请帮我解决这个WPF部分。

除此之外,我特意将CheckBox IsChecked绑定到一个名为BaseTourSheetExporterType的类,该类保存成员布尔值(IsExporterChecked)。这决定了它是否被检查过(当我重新打开窗口时,该类和成员需要记住我的更改)。

2 个答案:

答案 0 :(得分:0)

当我勾选复选框时,添加了以下代码并选择了我的radlistbox项目,但是当我取消选中该复选框时,我仍然没有调用Get / Set ExportFormatName属性:

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

请注意,当我选中复选框时,会正确调用Export / Set of ExportFormatName,它就在我取消选中时...请帮忙。

答案 1 :(得分:0)

我现在通过修改复选框的onclick事件解决了这个问题。这是函数的更新版本(请注意最后一行),我强制调用selectedvalue和我的RadListBox:

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);
    }