在我的WP7应用中使用MVVMLight解析xaml时,事件触发问题
本文关键字:xaml 事件 问题 解析 MVVMLight WP7 我的 应用 | 更新日期: 2023-09-27 17:49:36
当涉及到MVVM和c#时,我有点新手,但我不明白为什么我得到以下xaml解析异常:age_parser_bad_type
尝试解析我的事件触发器时发生异常:
<applicationspace:AnViewBase
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:c="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP7">
…在我的网格里面:
<Button Name="LoginButton"
Content="Login"
Height="72"
HorizontalAlignment="Left"
Margin="150,229,0,0"
VerticalAlignment="Top"
Width="160">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<c:EventToCommand Command="{Binding LoginCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
异常发生在i:EventTrigger EventName="Click"行。
有人知道为什么会发生这种情况吗?我以前见过这种方法,但我太缺乏经验了,无法理解为什么它对我不起作用。
我很感激你的帮助,谢谢你的时间。
我没有解决这个问题,但创建了一个工作…我认为这可能对一些人有帮助,所以在这里:
我扩展了按钮类,添加了一个命令属性到我的新"BindableButton"
public class BindableButton : Button
{
public BindableButton()
{
Click += (sender, e) =>
{
if (Command != null && Command.CanExecute(CommandParameter))
Command.Execute(CommandParameter);
};
}
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
public static DependencyProperty CommandProperty =
DependencyProperty.Register("Command", typeof(ICommand), typeof(BindableButton), new PropertyMetadata(null, CommandChanged));
public object CommandParameter
{
get { return GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
public static DependencyProperty CommandParameterProperty =
DependencyProperty.Register("CommandParameter", typeof(object), typeof(BindableButton), new PropertyMetadata(null));
private static void CommandChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
BindableButton button = source as BindableButton;
button.RegisterCommand((ICommand)e.OldValue, (ICommand)e.NewValue);
}
private void RegisterCommand(ICommand oldCommand, ICommand newCommand)
{
if (oldCommand != null)
oldCommand.CanExecuteChanged -= HandleCanExecuteChanged;
if (newCommand != null)
newCommand.CanExecuteChanged += HandleCanExecuteChanged;
HandleCanExecuteChanged(newCommand, EventArgs.Empty);
}
// Disable button if the command cannot execute
private void HandleCanExecuteChanged(object sender, EventArgs e)
{
if (Command != null)
IsEnabled = Command.CanExecute(CommandParameter);
}
}
之后,我在xaml中绑定了一个命令:
<b:BindableButton x:Name="LoginButton" Command="{Binding LoginCommand}"></b:BindableButton>