gpt4 book ai didi

c# - MvvmLight EventToCommand 不再工作

转载 作者:行者123 更新时间:2023-11-30 22:12:28 25 4
gpt4 key购买 nike

我在 Windows Phone 8 项目中使用 GalaSoft - MVVM Light Toolkit 时遇到了一个相当奇怪的问题。突然(在合并一些东西之后)我所有的 EventToCommand 调用都不再工作了。他们以前工作过。我已经尝试删除 MvvmLight 工具包并使用 Nuget 再次引用它,但结果保持不变。

一个例子:

MainMenuPage.xaml

<phone:PhoneApplicationPage 
...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:commands="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"
....>

<phone:PhoneApplicationPage.DataContext >
<Binding Source="{StaticResource MainMenuViewModel}"/>
</phone:PhoneApplicationPage.DataContext>


<!-- catch back key press -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="BackKeyPress">
<commands:EventToCommand
Command="{Binding BackKeyPressCommand}"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>

MainMenuViewModel.cs

 // back key press command
public RelayCommand<object> BackKeyPressCommand { get; set; }

public MainMenuViewModel()
{
BackKeyPressCommand = new RelayCommand<object>(
BackKeyPress,
(o) => true
);

...
}

private void BackKeyPress(Object o)
{
// handle back key press
}

这之前工作得很好,但现在不再调用 BackKeyPress(Object o) 方法。所有 EventToComamnd 调用都会发生这种情况。

如果我删除了 xmlns 标签,Resharper 建议添加:

xmlns:command="http://www.galasoft.ch/mvvmlight"

结果:

The name "EventToCommand" does not exist in the namespace "http://www.galasoft.ch/mvvmlight"

有谁遇到过类似的问题,或者知道是什么原因造成的?

最佳答案

这些命名空间是正确的。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:commands="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8"

但是您的 PhoneApplicationPage 有错误的 DataContext。

DataContext="{Binding Path=MainMenuViewModel, Source={StaticResource Locator}}"

MainMenuViewModel 是 ViewModelLocator 中的属性:

public MainMenuViewModel MainMenuViewModel
{
get
{
return ServiceLocator.Current.GetInstance<MainMenuViewModel>();
}
}

顺便说一句,BackKeyPress 的参数是 CancelEventArgs。你应该使用:

public RelayCommand<CancelEventArgs> BackKeyPressCommand { get; private set; }

this.BackKeyPressCommand = new RelayCommand<CancelEventArgs>(this.BackKeyPress)

private void BackKeyPress(CancelEventArgs e)
{
}

关于c# - MvvmLight EventToCommand 不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com