private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (sender is ListBox && !e.Handled)
{
e.Handled = true;
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
var parent = ((Control)sender).Parent as UIElement;
parent.RaiseEvent(eventArg);
}
}
When biding IsVisible of column in RadMultiColumnComboBox/GridViewItemsSourceProvider using MVVM pattern, the binding won't work initially, but is works as expected if removing the ElementName and adding it back in the below example xaml using debugger.
PS1. The binding for CheckBox(in the below sample) works with issue but not for RadMultiColumnComboBox
PS2. Also attached full sample code.
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:local="clr-namespace:TestProject"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="0,0,0,20" x:Name="rootGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Command="{Binding ToggleCmd}">Toggle Last Name Visible</Button>
<CheckBox Grid.Row="1" IsChecked="{Binding IsLastNameVisible}">Is Last Name Visible</CheckBox>
<telerik:RadMultiColumnComboBox Grid.Row="2">
<telerik:RadMultiColumnComboBox.ItemsSourceProvider>
<telerik:GridViewItemsSourceProvider ItemsSource="{Binding AllClubs}" AutoGenerateColumns="false" >
<telerik:GridViewItemsSourceProvider.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding FirstName}" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding LastName}"
IsVisible="{Binding DataContext.IsLastNameVisible , ElementName=rootGrid}" />
</telerik:GridViewItemsSourceProvider.Columns>
</telerik:GridViewItemsSourceProvider>
</telerik:RadMultiColumnComboBox.ItemsSourceProvider>
</telerik:RadMultiColumnComboBox>
</Grid>
</Window>
NotImplementedException is thrown if the ItemsSourceProvider property is set in a Style setter.
To work this around, implement custom GridViewItemsSourceProvider and override its CreateInstanceCore method.
public class CustomGridViewItemsSourceProvider : GridViewItemsSourceProvider
{
protected override Freezable CreateInstanceCore()
{
return new CustomGridViewItemsSourceProvider();
}
}
The value of the SelectedItem is shown twice when the theme is changed.
A temporary solution to this would be to revert to the 2022.2.511 version.
If you set the KeepDropDownOpen property of RadMultiColumnComboBox to False, clicking outside of the control should close the popup showing the dropdown content. This stops working after you drag a row from the GridView outside of the dropdown. For example, the drop can happen outside of the RadMultiColumnComboBox control or on its text input and drop down button area.
To resolve this, you can subscribe to the PreviewMouseLeftButtonUp event of RadMultiColumnComboBox and capture the mouse when needed.
this.mccb.AddHandler(RadMultiColumnComboBox.PreviewMouseLeftButtonUpEvent, new MouseButtonEventHandler(Mccb_MouseLeftButtonUp), true);
//---------------
private void Mccb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var button = Mouse.DirectlyOver as RadDropDownButton;
if (this.mccb.IsDropDownOpen && button != null && button.TemplatedParent is RadMultiColumnComboBox)
{
Dispatcher.BeginInvoke(new Action(() => { button.CaptureMouse(); }));
}
}
The text of the text input box is automatically assigned if SelectedItem is set initially. This should happen when the SelectionBoxesVisibility property is set to Visible (which is the default value). For example, if you have an item called "Item A" and you assign it to the SelectedItem property at startup of the control, then the text will also become "Item A".
To work this around, you can manually clear the text on loaded of the control.
private void RadMultiColumnComboBox_Loaded(object sender, RoutedEventArgs e)
{
var mccb = (RadMultiColumnComboBox)sender;
var tb = mccb.FindChildByType<TextBox>();
tb.Text = string.Empty;
}
private void RadMultiColumnComboBox_Loaded(object sender, RoutedEventArgs e)
{
var mccb = (RadMultiColumnComboBox)sender;
var selection = mccb.SelectedItem;
mccb.SetCurrentValue(RadMultiColumnComboBox.SelectedItemProperty, null);
mccb.SetCurrentValue(RadMultiColumnComboBox.SelectedItemProperty, selection);
}
When the SelectionMode of MultiColumnComboBox is set to Single, changing the Selection invokes twice the SelectionChanged event.
What I would expect is that the event fires only once, with one item in AddedItems and one item in RemovedItems. Currently, addition and removal is done seperately, and the two invocations of the event correspond to them.
To reproduce, just use the Getting Started article about MultiColumnComboBox with the Clubs ItemSource. Subscribe to SelectionChanged event and make a change to the selection. I hope the following gif makes this clear - the first selection is valid, but the second should invoke the event only once, with 1 item added, 1 removed.