über angefügte Ereignisse mit caliburn micro-Nachricht.Befestigen
Ich versuche, caliburn micro-Meldung auslösen eines angefügten Ereignisses, das ich erstellt:
public static class DataChanging
{
public delegate void DataChangingEventHandler(object sender, DataChangingEventArgs e);
public static readonly RoutedEvent ChangingEvent =
EventManager.RegisterRoutedEvent("Changing",
RoutingStrategy.Bubble,
typeof(DataChangingEventHandler),
typeof(DataChanging));
public static void AddChangingHandler(DependencyObject o, DataChangingEventHandler handler)
{
((UIElement)o).AddHandler(DataChanging.ChangingEvent, handler);
}
public static void RemoveChangingHandler(DependencyObject o, DataChangingEventHandler handler)
{
((UIElement)o).RemoveHandler(DataChanging.ChangingEvent, handler);
}
public static bool GetActivationMode(DependencyObject obj)
{
return (bool)obj.GetValue(ActivationModeProperty);
}
public static void SetActivationMode(DependencyObject obj, bool value)
{
obj.SetValue(ActivationModeProperty, value);
}
public static readonly DependencyProperty ActivationModeProperty =
DependencyProperty.RegisterAttached("ActivationMode",
typeof(bool),
typeof(DataChanging),
new FrameworkPropertyMetadata(false,
HandleActivationModeChanged));
private static void HandleActivationModeChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
var dataGrid = target as XamDataGrid;
if (dataGrid == null) //if trying to attach to something else than a datagrid, just ignore
return;
if ((bool)e.NewValue)
{
dataGrid.RecordDeactivating += selector_RecordDeactivating;
}
else
{
dataGrid.RecordDeactivating -= selector_RecordDeactivating;
}
}
static void selector_RecordDeactivating(object sender, RecordDeactivatingEventArgs e)
{
var args = new DataChangingEventArgs(DataChanging.ChangingEvent,sender)
{
Data = ((DataRecord) e.Record).DataItem,
ShouldCancelChange = false
};
(sender as UIElement).RaiseEvent(args);
e.Cancel = args.ShouldCancelChange;
}
}
In der XAML-Code selbst habe ich noch folgende Zeile:
cal:Message.Attach="[Helpers:DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
Helfer finden Sie den richtigen namespace.
Ich habe auch versucht andere Versionen, die nicht (voll-namespace):
cal:Message.Attach="[clr-namespace:RTF.Client.UI.Helpers.DataChanging.Changing] = [Action SelectedDataChanged($eventArgs)]"
versucht, die Interaktion Ereignis von mir:
Als ich versuchte, hinzufügen von einem normalen Ereignis auslösen, alles hat gut funktioniert, so ist es nicht mein befestigt Ereignis-Deklaration :
<EventTrigger RoutedEvent="Helpers:DataChanging.Changing">
<EventTrigger.Actions>
<BeginStoryboard x:Name="sb">
<Storyboard x:Name="dsf">
<Storyboard x:Name="myStoryboard">
<BooleanAnimationUsingKeyFrames Storyboard.TargetName="SSS" Storyboard.TargetProperty="IsChecked">
<DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
Was mache ich hier falsch?
Es gibt keine Möglichkeit zur Befestigung eines angefügten Ereignisses und rufen Sie es mit caliburn micro?
InformationsquelleAutor Clueless | 2011-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
endlich ich verstehen, das problem und die Lösung.
Das problem ist das system.windows.interactiviy.EventTrigger nicht unterstützt angefügte Ereignisse.
Caliburn micro nutzt es für die Aktionen, so dass meine angefügte Ereignis hat nicht funktioniert.
Die Lösung war, schreiben Sie eine benutzerdefinierte Ereignis auslösen, und verwenden Sie caliburn micro action in einer expliziten Art und Weise.
das benutzerdefinierte Ereignis auslösen, entnommen wurde, der post:http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html?showComment=1323674885597#c8041424175408473805
dann, wenn Sie verwenden möchten caliburn Aktion:
InformationsquelleAutor Clueless
Denke ich nicht, dass der parser für die verkürzte Botschaft.Attach-syntax unterstützt angefügte Ereignisse. Aber warum gehst du nicht fügen Sie einfach die ActionMessage direkt auf die Aktionen der EventTrigger?
InformationsquelleAutor kev
Haben Sie versucht das?
Ich brauchte, um ein Ereignis senden vom Kind Kontrolle der Eltern ViewModel, und es funktionierte gut für mich. Ich werde einige Beispiel-code, vielleicht wird jemand helfen!
Kind die Kontrolle codebehind:
Untergeordnete Steuerelement in XAML:
Übergeordneten Ansicht:
InformationsquelleAutor Shahin Dohan