2017-03-02 73 views
1

我正在使用多個ComboBox和GridView拖放Xaml Uwp應用程序。我在後面嘗試了一下xaml代碼,直到我認爲我知道我在應用程序中的位置。然後我開始將我的邏輯移動到ViewModel,PlayPageViewModel,我正在使用MvvM Light和Template 10.我有很多使用交互的事件。我已經有下降的代碼隱藏工作時,我將其移到向視圖模型我得到Cannot find method named GvNewPlayList_OnDrop on object of type TheLolFx.UWP.T10.ViewModels.PlayPageViewModel that matches the expected signature.uwp GridView刪除EventTriggerBehavior簽名

異常

 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中被觸發正如你可以看到註釋掉的那樣,我只用對象嘗試過。

什麼是正確的簽名?

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> 
[...] 

PlayPageViewModel

異常開火XAML試圖定位在VM此方法。

// private async void GvNewPlayList_OnDrop(object sender, object e) 
    // private async void GvNewPlayList_OnDrop() 

    private async void GvNewPlayList_OnDrop(object sender, DragEventArgs e) 
    { 
     e.AcceptedOperation = DataPackageOperation.Copy; 
     Logger.Log(this, "yup"); 
     [...] 
    } 

這一個事件發生在ContainerContentChanging事件。

public async void GvLocalSoundsPlayListEditorContainerContentChangingAsync() 
    { 
     Logger.Log(this, $"GvLocalSoundsPlayListEditorContainerContentChangingAsync: {SelectedPlayList?.PlayListName}"); 
     //_settings.CurrentPlayList = SelectedPlayList; 
     //LocalSounds = await _theLolFxV2DataServices.GetPlayListAsync(SelectedPlayList); 
     //NewLocalSoundsPlayListItems = await _theLolFxV2DataServices.GetPlayListAsync(CbPlayListEditorSelectedItem); 
    } 

回答

1

當調用某一方法使用CallMethodAction,該方法的簽名應該是這樣的:public void DoSomthing()。爲異常的原因是:

  1. GvNewPlayList_OnDrop被標記爲private,它需要標記爲public;其中不包含任何參數。

所以只要修改其簽名一樣,第二個方法:public async void GvLocalSoundsPlayListEditorContainerContentChangingAsync()

+0

捂臉!將其更改爲公開。適用於我的機器。這個簽名也適用於'public async void GvNewPlayList_OnDrop(object sender,DragEventArgs e)'給我訪問發送者和DragEventArgs。 –

+0

嗯,我明白了。方法不能在用於UWP的Behavior SDK中使用參數的約束已被刪除。 [見代碼在這裏](https://github.com/Microsoft/XamlBehaviors/blob/master/src/BehaviorsSDKManaged/Microsoft.Xaml.Interactions/Core/CallMethodAction.cs) – WPInfo