einzugeben Wenn ich meine Schaltfläche zu einem Befehl über XAML verdrahte, erhalte ich einen Laufzeitfehler System. Windows.Markup.XamlParseException: Geben Sie Wert für 'System.Windows.Data.Binding' eine Ausnahme ausgelöst. ---> System.InvalidCastException: Kann Objekt des Typs 'System.Reflection.RuntimeEventInfo' nicht in den Typ 'System.Reflection.MethodInfo' umwandeln.Command-Bindung Kann Objekt des Typs 'System.Reflection.RuntimeEventInfo' nicht umwandeln, um 'System.Reflection.MethodInfo'
Wenn ich den Befehl entfernen in XAML aller Bindung funktioniert gut, und meine Artikel anzeigen etc .. ist die Befehlsbindung:
Click="{Binding ElementName=MainGrid, Path=DataContext.AlertClickCommand}"
Codeansicht Modell verdrahten (in Code hinter meinem Fenster):
this.AlertsView.DataContext = GlobalStuff.AlertManager1.AlertViewModel1;
Hier Meine Ansicht Modell
der Datenkontext meiner Ansicht ist meiner Ansicht nach Modell istHier ist meine XAML
<UserControl x:Class="Arkle.SharedUI.View.AlertsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModel="clr-namespace:Arkle.SharedUI.ViewModel"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModel:AlertViewModel, IsDesignTimeCreatable=True}"
x:Name="EarlyPriceEditorViewModelWindow"
Height="Auto" Width="Auto">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
<Grid Name="MainGrid">
<StackPanel Name="MainStackPanel">
<ListBox ItemsSource="{Binding Path=Alerts}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" >
</WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Visibility="{Binding IsAlerting,Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel Orientation="Horizontal">
<Button Content="{Binding BackgroundMessage}" HorizontalAlignment="Left" Width="75" VerticalAlignment="Top" Height="Auto" Margin="2"
Click="{Binding ElementName=MainGrid, Path=DataContext.AlertClickCommand}" CommandParameter="{Binding}"
/>
<Label Content="{Binding OverlayMessage}" HorizontalAlignment="Left" Width="Auto" Margin="1,0,0,0" VerticalAlignment="Top" Background="Red" Foreground="White"
FontWeight="Bold">
<Label.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsAlerting}" Value="True">
<Setter Property="Image.Visibility" Value="Visible" />
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="ImageFlash">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(UIElement.Opacity)"
BeginTime="0:0:0" Duration="0:0:0.5"
From="1.0" To="0.0" RepeatBehavior="Forever" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="ImageFlash" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding IsAlerting}" Value="False">
<DataTrigger.Setters>
<Setter Property="Image.Visibility" Value="Collapsed" />
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
<Label Content="|" Margin="5"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</UserControl>
Hier ist mein Befehl
using System;
using System.Windows.Input;
using Arkle.Common;
using Arkle.SharedUI.Events;
using Arkle.SharedUI.Model;
namespace Arkle.SharedUI.ViewModel.Commands
{
public class AlertClickCommand : ICommand
{
private AlertViewModel _alertViewModel;
public AlertClickCommand(AlertViewModel alertViewModel)
{
_alertViewModel = alertViewModel;
}
public void Execute(object parameter)
{
if (parameter == null)
{
return;
}
var parameterAsAlert = (Alert)parameter;
switch (parameterAsAlert.BackgroundMessage)
{
case "Bets":
EventManager.Instance.GetEvent<ShowDangerBetsRequestedEvent>().Publish(null);
break;
default:
return;
}
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}
}
ist
ich auch die folgenden Designzeitfehler kann nicht werfen Objekt vom Typ (siehe Screenshot) ' System.Windows.Data.Binding 'zum Eingeben von' Microsoft.Expression.Markup.DocumentModel.DocumentNode '.
Erste Runtime Error - Führen Wirft
Folgefehler Laufzeit wiederholt Würfen: System.Windows.Markup.XamlParseException: Geben Sie Wert auf ‚System.Windows.Data. Binding "hat eine Ausnahme gemacht. ---> System.InvalidCastException: Kann Objekt des Typs 'System.Reflection.RuntimeEventInfo' nicht in den Typ 'System.Reflection.MethodInfo' umwandeln.
bei MS.Internal.Helper.CheckCanReceiveMarkupExtension (Markupextension Markupextension, IServiceProvider serviceprovider, DependencyObject & targetDependencyObject, DependencyProperty & targetDependencyProperty)
bei System.Windows.Data.BindingBase.ProvideValue (IServiceProvider serviceprovider)
bei MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue (MarkupExtension me, IServiceProvider serviceProvider)
--- Ende der inneren Ausnahme Stack-Trace ---
bei System.Windows.FrameworkTemplate.LoadTemplateXaml (XamlReader templateReader, XamlObjectWriter currentWriter)
.......................
Wo und wie haben Sie setzen Ihre 'DataContext'? Wo ist Ihr Modellcode (zumindest die Eigenschaft)? Und um Gottes Willen, bitte löschen Sie diesen lächerlich langen Stack-Trace, es sei denn, Sie möchten die Benutzer davon abhalten, Ihre Frage zu lesen. – Sheridan
Hallo, ich habe die Frage so geändert, dass der eingestellte Datenkontext angezeigt wird. – DermFrench