This question is locked. New answers and comments are not allowed.
Aleksandar
Top achievements
Rank 1
Iron
Iron
Aleksandar
asked on 08 Jul 2013, 08:01 PM
I'm using the DragVisualProvider from the documentation to create a custom drag visual based on a DraggedItemTemplate. The DraggedItemTemplate is bound to a DataTemplate located in the ListBox.Resources. However, my bindings within the DataTemplate fail if I try to bind using ElementName or RelativeSource to access data outside the DataTemplate.
<ListBox Grid.Row="1" ItemsSource="{Binding VehiclesCollectionView}" Style="{StaticResource DispatchListBoxStyle}" Height="Auto" AllowDrop="True"> <ListBox.Resources> <DataTemplate x:Key="VehicleDragTemplate"> <Grid HorizontalAlignment="Stretch" Margin="6"> <TextBlock Width="16" VerticalAlignment="Center" TextAlignment="Center" FontWeight="Bold" FontSize="10" Text="{Binding DataContext.DriverName, ElementName=LayoutRoot}" /> </Grid> </DataTemplate> </ListBox.Resources> <telerik:ListBoxDragDrop.Behavior> <telerik:ListBoxDragDropBehavior/> </telerik:ListBoxDragDrop.Behavior> <telerik:ListBoxDragDrop.DragVisualProvider> <my:DragVisualProvider DraggedItemTemplate="{StaticResource VehicleDragTemplate}" /> </telerik:ListBoxDragDrop.DragVisualProvider>3 Answers, 1 is accepted
0
Hi Aleksander,
Nik
Telerik
This won't work since the drag cue and the Relative source you are giving it are not in the same visual tree, hence the drag cue cannot locate the element you are giving it.
You can extend your DragVisual provider with an additional property for the DataContext.
Hope this makes sense!
Nik
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0
Mark
Top achievements
Rank 1
answered on 27 Jul 2013, 11:41 PM
Can you please provide an example for your advisement, it appears I'm having the same difficulty in migrating to DragAndDrop.
Specifically a DataTemplate could pick up a binding given:
When I look at your limited information and examples and examine the code, I have the new function:
... when I examine variable "item" and details.CurrentDraggedItem they correctly picks up the information but the binding to the template doesn't work.
with the old Manager I was able to use
but there is no such "Options" in DragAndDrop.
Thanks,
Mark
Specifically a DataTemplate could pick up a binding given:
<UserControl xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="RoasterWerks.DataTemplates.InvItemTemplate" <Border BorderThickness="1" BorderBrush="Black" CornerRadius="5"> <Grid x:Name="LayoutRoot" Margin="5" > <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="50*" MinWidth="50"/> <ColumnDefinition Width="30*" MinWidth="30"/> <ColumnDefinition Width="50*" MinWidth="50"/> <ColumnDefinition Width="30*" MinWidth="30"/> <ColumnDefinition Width="50*" MinWidth="50"/> <ColumnDefinition Width="30*" MinWidth="30"/> <ColumnDefinition Width="50*" MinWidth="50"/> <ColumnDefinition Width="30*" MinWidth="30"/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding quantity}" Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Foreground="Black"/> <TextBlock Text="{Binding packDesc}" Grid.Row="2" Grid.Column="0" Foreground="Black"/> <Border Grid.Column="1" Grid.Row="0" Grid.RowSpan="3" Width="1" Background="#FFA0AFC3" VerticalAlignment="Stretch" HorizontalAlignment="Center" Margin="0,10" /> <TextBlock Text="{Binding varietal}" Grid.ColumnSpan="8" Grid.Row="0" Grid.Column="2" Foreground="Black" FontWeight="Bold" HorizontalAlignment="Center" FontSize="14"/> <TextBlock Text="{Binding gradeName}" Grid.Row="1" Grid.Column="2" Foreground="Black"/> <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.Row="2" Grid.ColumnSpan="2"> <TextBlock Text="BF: " Foreground="Black"/> <TextBlock Text="{Binding isBirdFriendly, Converter={StaticResource BoolConverter}, ConverterParameter='3'}" Foreground="DarkGreen" FontWeight="Bold"/> </StackPanel> <TextBlock Text="{Binding LengthName}" Grid.Column="4" Grid.Row="1" Foreground="Black"/> <StackPanel Orientation="Horizontal" Grid.Column="4" Grid.Row="2" Grid.ColumnSpan="2"> <TextBlock Text="FT: " Foreground="Black"/> <TextBlock Text="{Binding isFairTrade, Converter={StaticResource BoolConverter}, ConverterParameter='3'}" Foreground="DarkGreen" FontWeight="Bold"/> </StackPanel> <TextBlock Text="{Binding DensityShort}" Grid.Row="1" Grid.Column="6" Foreground="Black"/> <StackPanel Orientation="Horizontal" Grid.Column="6" Grid.Row="2" Grid.ColumnSpan="2"> <TextBlock Text="Org: " Grid.Column="6" Grid.Row="2" Foreground="Black"/> <TextBlock Text="{Binding isOrganic, Converter={StaticResource BoolConverter}, ConverterParameter='3'}" Grid.Column="7" Grid.Row="2" Foreground="DarkGreen" FontWeight="Bold"/> </StackPanel> <TextBlock Text="{Binding ScreenName}" Grid.Column="8" Grid.Row="1" Foreground="Black"/> <StackPanel Orientation="Horizontal" Grid.Column="8" Grid.Row="2" Grid.ColumnSpan="2"> <TextBlock Text="RF: " Foreground="Black"/> <TextBlock Text="{Binding isRainForest, Converter={StaticResource BoolConverter}, ConverterParameter='3'}" Foreground="DarkGreen" FontWeight="Bold"/> </StackPanel> </Grid> </Border> </UserControl>When I look at your limited information and examples and examine the code, I have the new function:
private void OnUnfixedDragInitialize(object sender, DragInitializeEventArgs e) { DropIndicationDetails details = new DropIndicationDetails(); var row = e.OriginalSource as GridViewRow ?? (e.OriginalSource as FrameworkElement).ParentOfType<GridViewRow>(); var item = row != null ? row.Item : (sender as RadGridView).SelectedItem; details.CurrentDraggedItem = item; IDragPayload dragPayload = DragDropPayloadManager.GeneratePayload(null); dragPayload.SetData("DraggedData", item); dragPayload.SetData("DropDetails", details); e.Data = dragPayload; e.DragVisual = new Telerik.Windows.DragDrop.DragVisual() { Content = details, ContentTemplate = this.Resources["InvItemTemplate"] as DataTemplate }; e.DragVisualOffset = e.RelativeStartPoint; e.AllowedEffects = DragDropEffects.All; }... when I examine variable "item" and details.CurrentDraggedItem they correctly picks up the information but the binding to the template doesn't work.
### IMMEDIATE WINDOW ### item {qryUnfixedDiffPurch : {False,False,False,False,False,144,188,Arabica}} base {System.ServiceModel.DomainServices.Client.Entity}: {qryUnfixedDiffPurch : {False,False,False,False,False,144,188,Arabica}} _basePrice: 3 _convPounds: 2.2046226 _densityShort: null _diffPrice: null _earlyFD: null _effPrice: null _gradeName: null _isBirdFriendly: false _isDecaf: false _isFairTrade: false _isOrganic: false _isRainForest: false _lateFD: null _lengthName: null _origin: "Belize" _packDesc: "Bulk (Kilos)" _poLedgerID: 144 _poLineID: 188 _quantity: 4 _screenName: null _speciesID: "Arabica" _transDesc: "" _varietal: "Caturra" basePrice: 3 convPounds: 2.2046226 DensityShort: null diffPrice: null earlyFD: null effPrice: null gradeName: null isBirdFriendly: false isDecaf: false isFairTrade: false isOrganic: false isRainForest: false lateFD: null LengthName: null origin: "Belize" packDesc: "Bulk (Kilos)" POLedgerID: 144 POLineID: 188 quantity: 4 ScreenName: null speciesID: "Arabica" transDesc: "" varietal: "Caturra" details.CurrentDraggedItem {qryUnfixedDiffPurch : {False,False,False,False,False,144,188,Arabica}} base {System.ServiceModel.DomainServices.Client.Entity}: {qryUnfixedDiffPurch : {False,False,False,False,False,144,188,Arabica}} _basePrice: 3 _convPounds: 2.2046226 _densityShort: null _diffPrice: null _earlyFD: null _effPrice: null _gradeName: null _isBirdFriendly: false _isDecaf: false _isFairTrade: false _isOrganic: false _isRainForest: false _lateFD: null _lengthName: null _origin: "Belize" _packDesc: "Bulk (Kilos)" _poLedgerID: 144 _poLineID: 188 _quantity: 4 _screenName: null _speciesID: "Arabica" _transDesc: "" _varietal: "Caturra" basePrice: 3 convPounds: 2.2046226 DensityShort: null diffPrice: null earlyFD: null effPrice: null gradeName: null isBirdFriendly: false isDecaf: false isFairTrade: false isOrganic: false isRainForest: false lateFD: null LengthName: null origin: "Belize" packDesc: "Bulk (Kilos)" POLedgerID: 144 POLineID: 188 quantity: 4 ScreenName: null speciesID: "Arabica" transDesc: "" varietal: "Caturra" with the old Manager I was able to use
if (e.Options.ParticipatingVisualRoots.Contains(this) == false) e.Options.ParticipatingVisualRoots.Add(this); Thanks,
Mark
0
Hello Aleksandar,
Nik
Telerik
The idea is to create a DependencyProperty in your DragVisualProvider that specifies the DataContext of the DragVisuals ot creates. That way you will be able to access the data context of your main window/ visual and bind to the values you are looking for.
Hope this helps!
Nik
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>