Xaml uwp GridView丢弃事件触发器行为签名
我正在开发一个带有多个ComboBox和GridView的拖放式Xaml Uwp应用程序。我在xaml代码中做了一点实验,直到我知道我的应用程序将走向何方。然后,我开始将我的逻辑转换为一个视图模型,即PlayPageViewModel,我正在使用MvvM Light和Template 10。我有许多活动使用交互。当我将其移到视图模型时,我已经在codeBehind中工作过了。我在olfx.UWP.T10.ViewModels.PlayPageViewModel类型的对象上找不到名为GvNewPlayList\u OnDrop的方法,该方法与预期签名匹配。 例外情况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
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()
。例外情况的原因是:
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);
}