Xaml uwp GridView丢弃事件触发器行为签名

Xaml uwp GridView丢弃事件触发器行为签名,xaml,uwp,mvvm-light,template10,Xaml,Uwp,Mvvm Light,Template10,我正在开发一个带有多个ComboBox和GridView的拖放式Xaml Uwp应用程序。我在xaml代码中做了一点实验,直到我知道我的应用程序将走向何方。然后,我开始将我的逻辑转换为一个视图模型,即PlayPageViewModel,我正在使用MvvM Light和Template 10。我有许多活动使用交互。当我将其移到视图模型时,我已经在codeBehind中工作过了。我在olfx.UWP.T10.ViewModels.PlayPageViewModel类型的对象上找不到名为GvNewPl

我正在开发一个带有多个ComboBox和GridView的拖放式Xaml Uwp应用程序。我在xaml代码中做了一点实验,直到我知道我的应用程序将走向何方。然后,我开始将我的逻辑转换为一个视图模型,即PlayPageViewModel,我正在使用MvvM Light和Template 10。我有许多活动使用交互。当我将其移到视图模型时,我已经在codeBehind中工作过了。我在olfx.UWP.T10.ViewModels.PlayPageViewModel类型的对象上找不到名为GvNewPlayList\u OnDrop的方法,该方法与预期签名匹配。

例外情况

        Exception   {System.ArgumentException: Cannot find method named    GvNewPlayList_OnDrop on object of type TheLolFx.UWP.T10.ViewModels.PlayPageViewModel that matches the expected signature.
       at Microsoft.Xaml.Interactions.Core.CallMethodAction.Execute(Object sender, Object parameter)
       at Microsoft.Xaml.Interactivity.Interaction.ExecuteActions(Object sender, ActionCollection actions, Object parameter)
       at Microsoft.Xaml.Interactions.Core.EventTriggerBehavior.OnEvent(Object sender, Object eventArgs)}   System.Exception {System.ArgumentException}
信息

Message "System.ArgumentException: Cannot find method named GvNewPlayList_OnDrop on object of type TheLolFx.UWP.T10.ViewModels.PlayPageViewModel that matches the expected signature.\r\n  at Microsoft.Xaml.Interactions.Core.CallMethodAction.Execute(Object sender, Object parameter)\r\n at Microsoft.Xaml.Interactivity.Interaction.ExecuteActions(Object sender, ActionCollection actions, Object parameter)\r\n  at Microsoft.Xaml.Interactions.Core.EventTriggerBehavior.OnEvent(Object sender, Object eventArgs)"  string
我使用了代码隐藏中生成的签名。
ContainerContentChanging
在ViewModel中被触发,正如您可以看到的那样,我也尝试了使用just对象

正确的签名是什么

XAML

<GridView x:Name="GvNewPlayList"
                      RelativePanel.Below="CbPlayListEditor"
                      Visibility="{Binding LbNewPlayListVisibility}"
                      Background="BurlyWood"
                      Padding="5"
                      Header="New Play List"
                      ItemsSource="{Binding NewLocalSoundsPlayListsSelectedItem.LocalSfxV2s}"

                      CanDragItems="True"
                      AllowDrop="True"
                      CanReorderItems="True"
                      IsItemClickEnabled="True"
                      DragItemsStarting="LbNewPlayList_OnDragItemsStarting"

                      DragOver="LbNewPlayList_OnDragOver">                   
                <interactivity:Interaction.Behaviors>
                    <core:EventTriggerBehavior EventName="Drop">
                        <core:CallMethodAction MethodName="GvNewPlayList_OnDrop"
                                               TargetObject="{Binding Mode=OneWay}" />
                    </core:EventTriggerBehavior>

                    <core:EventTriggerBehavior EventName="ContainerContentChanging">
                        <core:CallMethodAction MethodName="GvLocalSoundsPlayListEditorContainerContentChangingAsync"
                                               TargetObject="{Binding Mode=OneWay}" />
                    </core:EventTriggerBehavior>
                </interactivity:Interaction.Behaviors>

                <GridView.ItemTemplate>
                    <DataTemplate>
[...]
这一个从
ContainerContentChanging
事件触发

    public async void GvLocalSoundsPlayListEditorContainerContentChangingAsync()
    {
        Logger.Log(this, $"GvLocalSoundsPlayListEditorContainerContentChangingAsync: {SelectedPlayList?.PlayListName}");
        //_settings.CurrentPlayList = SelectedPlayList;
        //LocalSounds = await _theLolFxV2DataServices.GetPlayListAsync(SelectedPlayList);
        //NewLocalSoundsPlayListItems = await _theLolFxV2DataServices.GetPlayListAsync(CbPlayListEditorSelectedItem);
    }
使用调用方法时,该方法的签名应如下所示:
public void DoSomthing()
。例外情况的原因是:

  • GvNewPlayList_OnDrop被标记为
    private
    ,它需要标记为
    public

  • 它不能包含任何参数


  • 因此,只需像第二个方法那样修改它的签名:
    public async void GvLocalSoundsPlayListEditorContainerContentChangingAsync()

    FacePalm!把它改成公共的。在我的机器上工作。这个签名也可以使用
    public async void GvNewPlayList\u OnDrop(对象发送方,DragEventArgs e)
    让我可以访问发送方和DragEventArgs。我明白了。方法不能在UWP的行为SDK中获取参数的约束已被删除。
        public async void GvLocalSoundsPlayListEditorContainerContentChangingAsync()
        {
            Logger.Log(this, $"GvLocalSoundsPlayListEditorContainerContentChangingAsync: {SelectedPlayList?.PlayListName}");
            //_settings.CurrentPlayList = SelectedPlayList;
            //LocalSounds = await _theLolFxV2DataServices.GetPlayListAsync(SelectedPlayList);
            //NewLocalSoundsPlayListItems = await _theLolFxV2DataServices.GetPlayListAsync(CbPlayListEditorSelectedItem);
        }