RadListBox与RadListBoxItem DragDrop WPF

时间:2016-03-18 06:52:47

标签: c# wpf telerik

我使用WPF控件使用MVVM模式处理Telerik个应用程序。

我正在使用绑定了集合的telerik:RadListBox。我的问题是当一个集合绑定到一个RadListBox时,该集合将被转换为RadListBoxRadListBoxItem

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

1 个答案:

答案 0 :(得分:1)

请参阅docs

发件人

  

附加事件处理程序的对象。

就是这样。

您正在拖动某个项目,但该事件已附加到容器中。

<telerik:RadListBox ... DragLeave="lstMarketSeries_DragLeave" ... >`

当RadListBox发生DragLeave事件时,将触发指定的处理程序(实际上由您设置)。 sender设置为RadListBox,因为处理程序已附加到它,而不是项目。

你误解了你所指的例子。仔细阅读这个例子的代码。在示例中,事件处理程序设置为ItemContainerStylewhich is used to inflate every item。在示例中,我们看到处理程序,单独附加到每个项目,因此处理程序的sender被设置为项目而不是控件本身。

如果您需要sender来设置项目,则必须创建一个样式并为其附加处理程序。