Hi friends, I have problem when dragged Image is replace an image that implements the DropCommnad command even if the if condition inside the DropCommand is not matched.
I have an Image in xaml:
<Image x:Name="chooseImage"
IsVisible="{Binding IsVisible}"
Source="{Binding ImageRoute}"
Opacity="{Binding BindingContext.CarImageOpacity, Source={x:Reference ActivePage}}"
Aspect="AspectFit"
WidthRequest="120">
<Image.GestureRecognizers>
<DragGestureRecognizer
CanDrag="True"
DropCompletedCommand="{Binding BindingContext.DragCompletedCommand , Source={x:Reference ActivePage}}"
DropCompletedCommandParameter="{Binding .}"
DragStartingCommand="{Binding BindingContext.DragStartingCommand ,Source={x:Reference ActivePage}}"
DragStartingCommandParameter="{Binding .}">
</DragGestureRecognizer>
</Image.GestureRecognizers>
</Image>```
It's base on CollectionView (cars).
And one Image for drop (where dragged image will be dropped):
<Image x:Name="FirstImage"
Grid.Row="1" BackgroundColor="Yellow"
HeightRequest="120" WidthRequest="120"
HorizontalOptions="Center"
Source="{Binding FirstImageCardSource}"
IsVisible="true"
Opacity="{Binding FirstCardOpacity}"
VerticalOptions="End"
Aspect="Fill">
<Image.GestureRecognizers>
<DropGestureRecognizer AllowDrop="True"
DropCommandParameter="{x:Reference FirstImage}"
DropCommand="{Binding BindingContext.DropCommand, Source={x:Reference ActivePage}}"/>
</Image.GestureRecognizers>
</Image>
So, main problem right inside my ViewModel, there is my Drag and Drop commands:
[RelayCommand]
private void DragStarting(object e)
{
DragItem = e as Car;
DragItem.IsVisible = false;
}
[RelayCommand]
private void Drop(object e)
{
Image takingImage = e as Image;
// Get the image source string
string imageSource = takingImage.Source.ToString();
// Replace "File: " with an empty string
string fileName = imageSource.Replace("File: ", "");
// Compare the file names
if (DragItem.ImageRoute == fileName)
{
Console.WriteLine("Something cool");]
}
else
{
Console.WriteLine("Incorrect match. Do not change the image source.");
return;
}
//else code
}
When a mismatch occurs, it is called a return; but the Source of the image where the Drop occurred is still changed. How to fix this? I have tried everything (OneWay Binding varius Properties and others), can you help me in any way?
You can use the following code to achieve it:
Code behind:
And here is the effect.
I also tried to implement it in ViewModel but failed. Adding a breakpoint to run is ok, but runnig it directly will still change the image. It's weird.