2016-03-18 97 views
1

我正在使用Telerik控件工作於WPF應用程序,MVVM模式。我正在使用telerik:RadListBox集合綁定。我的問題是,當一個集合綁定到一個RadListBox時,集合將變成RadListBoxRadListBoxItemRadListBox vs RadListBoxItem DragDrop WPF

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

    } 
} 

當收集勢必應該返回爲正確項?爲什麼我將它作爲RadListBox本身而不是RadListBoxItem

現在我需要那個Draggable對象RadListBoxItem。有什麼辦法嗎?

僅供參考,

看到這裏ListBoxDragDrop發件人ListBoxItem而不是ListBox

回答

1

見​​。

發件人是

其中該事件處理程序被安裝的對象。

就是這樣。

您正在拖動一個項目,但該事件已附加到容器。

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

Therfore當DragLeave事件發生到RadListBox,指定的處理程序被觸發(這實際上是由您定)。 sender設置爲RadListBox,因爲處理程序已附加到它,而不是項目。

你錯誤地引用了你指的例子。仔細閱讀實例的代碼。在示例中,事件處理程序設置爲ItemContainerStylewhich is used to inflate every item。在該示例中,我們看到處理程序,分別附加到每個項目,因此處理程序的sender被設置爲項目而不是控件本身。

如果您需要sender來定義一個項目,您必須執行相同的操作 - 創建樣式併爲其添加處理程序。

+0

我在拖拉'RadListBox'或'RadListBoxItem'嗎? – iamCR

+0

檢查此,http://stackoverflow.com/questions/3350187/wpf-c-rearrange-items-in-listbox-via-drag-and-drop – iamCR

+0

@SanthoshKumar我現在看到什麼讓你困惑。查看更新後的答案。 –