我使用WPF
控件使用MVVM
模式处理Telerik
个应用程序。
我正在使用绑定了集合的telerik:RadListBox
。我的问题是当一个集合绑定到一个RadListBox时,该集合将被转换为RadListBox
或RadListBoxItem
?
XAML:
<telerik:RadListBox x:Name="lstMarketSeries" ItemsSource="{Binding MarketSeriesCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True, ValidatesOnDataErrors=True}" ItemContainerStyle="{StaticResource DraggableListBoxItem}"DragLeave="lstMarketSeries_DragLeave" Style="{StaticResource myListboxStyle}" SelectionMode="Extended" telerik:StyleManager.Theme="Windows8">
</telerik:RadListBox>
XAML.cs:
/// <summary>
/// Event fired when series are dragged and moved.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lstMarketSeries_DragLeave(object sender, DragEventArgs e)
{
if (sender is RadListBox) // True
{
}
if(sender is RadListBoxItem) //False Why??
{
}
}
当一个集合被绑定时,它应该作为Items Correct返回?为什么我将其作为RadListBox
本身而不是RadListBoxItem
?
现在我需要将Draggable对象作为RadListBoxItem
。有什么办法吗?
FYI,
请在此处ListBoxDragDrop发件人为ListBoxItem
而非ListBox
答案 0 :(得分:1)
请参阅docs。
发件人
附加事件处理程序的对象。
就是这样。
您正在拖动某个项目,但该事件已附加到容器中。
<telerik:RadListBox ... DragLeave="lstMarketSeries_DragLeave" ... >`
当RadListBox发生DragLeave
事件时,将触发指定的处理程序(实际上由您设置)。 sender
设置为RadListBox
,因为处理程序已附加到它,而不是项目。
你误解了你所指的例子。仔细阅读这个例子的代码。在示例中,事件处理程序设置为ItemContainerStyle
,which is used to inflate every item。在示例中,我们看到处理程序,单独附加到每个项目,因此处理程序的sender
被设置为项目而不是控件本身。
如果您需要sender
来设置项目,则必须创建一个样式并为其附加处理程序。